访问JavaScript XPath查询中的节点集

Tar*_*rik 6 javascript xml ajax xpath

我有一个简单的问题,我似乎无法找到答案.

我想压缩两个XPath语句(获取属性值).我了解了|运算符,了解它如何返回节点集.

var getdata = xmldoc.evaluate
(
    '/foo/bar[@world=\''+hello+'\']/child::*/attribute::name
    |/foo/bar[@world=\''hello+'\']/child::*/attribute::id', 
    xmldoc, null, XPathResult.ANY_TYPE, null
);
Run Code Online (Sandbox Code Playgroud)

对于任何想知道的人,不,我不会以这种方式格式化我的评估字符串...尽管如此,我现在有点像我输入它了.无论如何,这就是我测试它的方式.

alert(getItemData.iterateNext().childNodes[0].nodeValue);
Run Code Online (Sandbox Code Playgroud)

这样可行!但它只返回第一个.写这篇文章的时候,我只是试着.length突破......它只计算一个项目.我被欺骗了|吗?我如何获得一套然后通过它们?

XML文档,根据要求.

<?xml version="1.0" encoding="ISO-8859-1"?>
<foo>
    <bar world="hello" id="1">
        <subbar name="item1" id="2">
        </subbar>
    </bar>
    <bar world="bye" id="3">
        <subbar name="item2" id="4">
        </subbar>
    </bar>
</foo>
Run Code Online (Sandbox Code Playgroud)

编辑:我目前正在使用一个抓取元素而不是属性的函数,但我真的想知道另一种方式.除非我正在做的是最好的方式.

Jas*_*ske 0

好吧,您对“管道”的使用是正确的(http://www.tizag.com/xmlTutorial/xpathbar.php),所以我能看到的唯一代码可能是关闭的,第二个 xpath 命令中缺少 + ,但是可能是伪代码,所以我只会将其视为一半答案。至于最佳实践,在我看来,我会抓取 subbar 元素,然后在需要的地方抓取它的属性,进行优化,就像您建议的那样混淆所引用的数据。似乎微优化太多了,但这只是一个意见。也许您有一个很长的属性列表,并且您确实节省了解析时间。