在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 表达式并不是很方便,它只依赖于节点的位置。如果您解释了您试图在该文档中查找的内容(当然还要出示该文档),人们可能会建议其他表达方式。
我在网页上有一个元素,它通过 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 表达式并不是很方便,它只依赖于节点的位置。如果您解释了您试图在该文档中查找的内容(当然还要出示该文档),人们可能会建议其他表达方式。