gpt4 book ai didi

html - 为什么 XPath 选择上下文 Node 之外的 Node ?

转载 作者:搜寻专家 更新时间:2023-11-01 00:38:42 25 4
gpt4 key购买 nike

我在 Node.js 中使用 XPath,我有以下 HTML 文档,我想在其中选择所有文章 Node ,然后在第二步中选择所有类为 "abc" 的 div:

<html lang="en">
<head>
<meta charset="UTF-8">
<title>Test</title>
</head>
<body>
<article>
<div>123456</div>
<div class="abc">Hello0!</div>
</article>
<article>
<div>123456</div>
<div class="abc">Hello1!</div>
</article>
<article>
<div>123456</div>
<div class="abc">Hello2!</div>
</article>
<article>
<div>123456</div>
<div class="abc">Hello3!</div>
</article>
<article>
<div>123456</div>
<div class="abc">Hello4!</div>
</article>
<article>
<div>123456</div>
<div class="abc">Hello5!</div>
</article>
<article>
<div>123456</div>
<div class="abc">Hello6!</div>
</article>
<article>
<div>123456</div>
<div class="abc">Hello7!</div>
</article>
<article>
<div>123456</div>
<div class="abc">Hello8!</div>
</article>
<article>
<div>123456</div>
<div class="abc">Hello9!</div>
</article>
</body>
</html>

我使用以下代码来选择 Node :

var xpath = require('xpath');
var DOMParser = require('xmldom').DOMParser;

let parser: DOMParser = new DOMParser();
let doc = parser.parseFromString("HTML-document","text/xml");
let nodes: Node[] = xpath.select("//article", doc);
console.log("NODES: ", nodes.length);
let divs: Node[] = xpath.select("//div[@class='abc']", nodes[0]);
console.log("DIVS: ", divs.length);

我的问题是,当检查两个控制台日志时,第一个显示 "NODES: 10"

到目前为止,我有十个文章 Node 。但是,当我再次选择十个文章 Node 中的第一个时,控制台显示 "DIVS: 10"。所以 XPath 从一篇文章中选择了所有 10 个 div,而我期望只有一个 div

我做错了什么?

最佳答案

需要注意的是,//表示从根元素开始搜索页面的任意位置,而.//表示从当前 Node 开始搜索页面的任意位置。因此,如果您想从已找到的 article 元素开始搜索,您需要替换

"//div[@class='abc']"

".//div[@class='abc']"

"./div[@class='abc']"

因为 divarticle 的直接子级

关于html - 为什么 XPath 选择上下文 Node 之外的 Node ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42399404/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com