Javascript Node.js XPath示例?
我有一个XML数据,阅读时使用了“xpath”和“xmldom”。我正在获取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
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/