簡體   English   中英

Node.js XPath示例?

[英]Node.js XPath example?

我有一個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);

  });

最終輸出:

/abc/
/abc/
/abc/

問題是您要獲取節點集的字符串值,根據定義,這是第一個節點的字符串值。 遍歷JavaScript中的選定節點,並且僅單獨獲取每個節點的字符串值,而不是集體調用整個節點集上的XPath string()函數。

還不清楚為什么要在所有relativePath元素上使用嵌套循環而不是單個循環,但這也許是將整個程序簡化為已發布示例的產物。 無論如何,如果希望將內部循環限制為僅在當前content-item上下文節點下的那些relativePath元素,請改用.//relativePath

最后,您的XML格式不正確。

Node.js xmldom / xpath工作示例

我在下面的示例中解決了上述問題(並縮進了XML以方便閱讀):

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/

按照要求。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM