具有元素ID和嵌套元素的Node.js XPath选择器不起作用

时间:2019-02-26 15:39:43

标签: node.js xpath

我有这个html:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" class="lang-ru">
<head></head>
<body>
<div id="content">
    root
    <div>first</div>
    <div>second</div>
</div>
</body>
</html>

使用此选择器将按预期返回三个嵌套元素://*[@id="content"]/*

但尝试应用此选择器仅返回第一个嵌套的div://*[@id="content"]/div[1],并且返回节点列表为空

此选择器返回两个div都不起作用://*[@id="content"]/div

如何获取包含first的第一个嵌套div,以及如何拥有所有嵌套的div,而没有像p这样的其他元素。

Here is the problem

1 个答案:

答案 0 :(得分:1)

这是因为您将<html>绑定到命名空间xmlns="http://www.w3.org/1999/xhtml"。删除该属性即可使用。

或者,您可以告诉xpath这样使用此命名空间:

const select = xpath.useNamespaces({mynamespace: "http://www.w3.org/1999/xhtml"});
const nodes = select('//mynamespace:div', doc);