javascript - 我正在使用 libxmljs 解析 XML 文件,并且 .get() 始终返回第一个子文件

标签 javascript node.js libxml-js

我已经看了这个代码几个小时了,但我无法让它工作,我也不知道为什么。

var libxmljs = require("libxmljs");
var xml =  '<?xml version="1.0" encoding="UTF-8"?>' +
       '<root>' +
           '<child foo="bar">' +
               '<grandchild>First Child</grandchild>' +
           '</child>' +
           '<child foo="bar">' +
               '<grandchild>Second child</grandchild>' +
           '</child>' +
           '<child foo="bar">' +
               '<grandchild>Third Child</grandchild>' +
           '</child>' +
           '<sibling>with content!</sibling>' +
       '</root>';

var xmlDoc = libxmljs.parseXml(xml);

var childs = xmlDoc.find('//child');

for (var i = 0; i < childs.length; i++)
  console.log(childs[i].get('//grandchild').text()); 

我期望的是进入控制台

第一个 child 第二个 child 第三个 child

但是我得到的是:

第一个 child 第一个 child 第一个 child

我发现 .get('//grandchild') 返回代码中的所有孙子,尽管它只是从一个 Node 调用的。我不能将它与索引一起使用,因为在我的实际 XML 中,每个 Node 都可以有不同的子 Node 。

谢谢!

最佳答案

您需要相对 XPath。

for (var i = 0; i < childs.length; i++)
  console.log(childs[i].get('.//grandchild').text()); 
//---------------------------^

关于javascript - 我正在使用 libxmljs 解析 XML 文件,并且 .get() 始终返回第一个子文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46915928/

相关文章:

javascript - Node 没有正确地 gc 我的对象

javascript - NodeJS 中 libxmljs 中的 RangeError

javascript - 在VB.NET中写了cookie,如何在Javascript中提取?

c++ - 从 Web 工作线程调用 C++ v8 函数

node.js - NodeJS 与 Apache 和目录列表

node.js - Visual Studio 安装程序未安装 node.js

网站上的javascript时钟,两个时区

javascript - NodeJs setTimeout 的clearTimeout 唯一ID

javascript - 如何使用javascript获取div中的子节点

node.js - libxmljs "could not locate the bindings file"错误(Windows)