Javascript Node.js XPath示例?

Javascript Node.js XPath示例?,javascript,node.js,xml,xpath,xmldom,Javascript,Node.js,Xml,Xpath,Xmldom,我有一个XML数据,阅读时使用了“xpath”和“xmldom”。我正在获取relativePath值,但它只给出了第一个值(/abc/)3次。我无法获得其他价值 var xpath = require('xpath') var dom = require('xmldom').DOMParser var le = ` <content> <data> <content-item> <relativePath>/abc/</relativeP

我有一个XML数据,阅读时使用了“xpath”和“xmldom”。我正在获取
relativePath
值,但它只给出了第一个值(
/abc/
)3次。我无法获得其他价值

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

var le = `
<content>
<data>
<content-item>
<relativePath>/abc/</relativePath>
<text>abc</text>
<leaf>false</leaf>
<lastModified>2018-10-16</lastModified>
</content-item>
<content-item>
<relativePath>/defghi/</relativePath>
<text>defghi</text>
<leaf>false</leaf>
<lastModified>2018-06-23</lastModified>
</content-item>
<content-item>
<relativePath>/jklmn/</relativePath>
<text>jklmn</text>
<leaf>false</leaf>
<lastModified>2019-02-27</lastModified>
</content-item>`;

var doc = new dom().parseFromString(le);
var nodes = xpath.select("//content-item", doc); 
  nodes.forEach( (n, i) => {
    var title = xpath.select("string(//relativePath)", n);

    console.log(title);

  });

问题是您正在获取节点集的字符串值,根据定义,这是第一个节点的字符串值。在JavaScript中迭代选定的节点,仅单独获取每个节点的字符串值,而不是对整个节点集集体调用XPath
string()
函数

还不清楚为什么您希望在所有
relativePath
元素上使用嵌套循环而不是单个循环,但这可能是将整个程序简化为发布示例的产物。在任何情况下,如果希望仅将内部循环限制为当前
内容项
上下文节点下的
相对路径
元素,请改用
//relativePath

最后,您的XML格式不正确

Node.js xmldom/xpath工作示例 我在下面的示例中修复了上述问题(并缩进XML以便于阅读):


根据要求。

您能给我一个建议吗example@santosh:Answer已更新,您的代码已按要求更正。感谢您的更新,但如果我需要“lastModified”如何获取,则只提供了“relativePath”。我得到了一个示例,但我不知道它是否是执行节点的正确方法。forEach((n,i)=>{xpath.select('//relativePath',n)[i].firstChild.data xpath.select('//lastModified',n)[i].firstChild.data})@桑托什:对不起,但你的问题清楚地表明了我对相对路径的兴趣,所以这就是我所展示的。不能在这里无限期地追踪变化。如果您现在希望访问另一个项目,并且无法将此工作示例应用于您的新需求,请提出新问题并明确您的实际目标。非常感谢。
/abc/
/abc/
/abc/
var xpath = require('xpath')
var dom = require('xmldom').DOMParser

var le = `
<content>
  <data>
    <content-item>
      <relativePath>/abc/</relativePath>
      <text>abc</text>
      <leaf>false</leaf>
      <lastModified>2018-10-16</lastModified>
    </content-item>
    <content-item>
      <relativePath>/defghi/</relativePath>
      <text>defghi</text>
      <leaf>false</leaf>
      <lastModified>2018-06-23</lastModified>
    </content-item>
    <content-item>
      <relativePath>/jklmn/</relativePath>
      <text>jklmn</text>
      <leaf>false</leaf>
      <lastModified>2019-02-27</lastModified>
    </content-item>
  </data>
</content>`;

var doc = new dom().parseFromString(le);
var nodes = xpath.select("//relativePath", doc); 
nodes.forEach( (n, i) => {
  console.log(n.textContent);
});
/abc/
/defghi/
/jklmn/