在nodejs + xpath中获取节点

Acquiring node in nodejs + xpath

我在网页上有一个元素,它通过 Chrome Inspector 提供了以下 XPath 源 //*[@id="page-wrapper"]/div/table/tbody/tr/td/table/tbody/tr/td[2]/table/tbody/tr[3]/td/table[2]/tbody/tr[2]/td[2]/a

我想在 Node.js 中以编程方式获取此节点。

var parser = new parse5.Parser();
var document = parser.parse(data);
var xhtmldoc = xmlserializer.serializeToString(document);
var xdom = new xmldomparser().parseFromString(xhtmldoc);
var selector = xpath.useNamespaces({"doc": "http://www.w3.org/1999/xhtml"});
var node = selector('//*[@id="page-wrapper"]/div/table/tbody/tr/td/table/tbody/tr/td[2]/table/tbody/tr[3]/td/table[2]/tbody/tr[2]/td[2]/a', xdom);
console.log(node);

但它一直是 returns 具有任何 xpath 变体的空对象。有可能实现吗?

谢谢。

您似乎声明了正确的命名空间和前缀:

 var selector = xpath.useNamespaces({"doc": "http://www.w3.org/1999/xhtml"});

但是你没有在路径表达式中使用它。在路径表达式中使用 doc: 前缀元素:

var node = selector('//*[@id="page-wrapper"]/doc:div/doc:table/doc:tbody/doc:tr/doc:td/doc:table/doc:tbody/doc:tr/doc:td[2]/doc:table/doc:tbody/doc:tr[3]/doc:td/doc:table[2]/doc:tbody/doc:tr[2]/doc:td[2]/doc:a', xdom);

也就是说,您从 Chrome Inspector 返回的 XPath 表达式并不是很方便,它只依赖于节点的位置。如果您解释了您试图在该文档中查找的内容(当然还要出示该文档),人们可能会建议其他表达方式。