繁体   English   中英

访问JavaScript XPath查询中的节点集

[英]Accessing a node-set in a JavaScript XPath query

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

我想压缩两个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
);

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

alert(getItemData.iterateNext().childNodes[0].nodeValue);

这样可行! 但它只返回第一个。 在写这篇文章时,我只是尝试了.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>

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

如果JQuery是一个选项,那么查看他们的XML遍历库可能是值得的。 快速搜索在这里拉了一篇文章。 我写了一个非常粗略的例子,说明导入xml文档后逻辑的样子,链接中对此进行了解释。

var hello = "foo";
$('bar[world=' + hello + '] > subbar').each(function () {
    // You'd want to save these values somewhere else, obviously.
    $(this).getAttribute(name);
    $(this).getAttribute(id);
});

这里的关键是你使用的XPathResult类型。

我已经实现了同样的工作样本。 请参阅http://jsbin.com/eneso3/5/edit上的代码

基本上你必须使用Iterator作为结果类型sot hat我们可以迭代它们来获取文本。 请参阅工作代码示例页面上提到的Xpath参考。

那么你对“管道”的使用是正确的( http://www.tizag.com/xmlTutorial/xpathbar.php )所以我能看到的唯一代码可能是第二个xpath命令中缺少的+,但是可能是伪代码,所以我只把它算作半答案。 至于最佳实践,在我看来,我会抓住子栏元素,然后抓住它的属性,在那里你需要一个优化,就像你建议的那样,模糊了被引用的数据。 似乎太多的微型优化,但这只是一个意见。 也许你有很长的属性列表,你真的在​​节省解析时间。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM