代码之家  ›  专栏  ›  技术社区  ›  Tarik

访问JavaScript XPath查询中的节点集

  •  6
  • Tarik  · 技术社区  · 15 年前

    我有一个非常简单的问题,我似乎找不到答案。

    我想压缩两条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>
    

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

    3 回复  |  直到 15 年前
        1
  •  1
  •   raynjamin    15 年前

    如果JQuery是一个选项,那么您可能值得查看他们的XML遍历库。快速搜索出一篇文章 here .我写了一个非常粗略的例子,说明了导入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);
    });
    
        2
  •  1
  •   Badri Narayan Manicka    15 年前

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

    我已经实现了一个同样的工作示例。 请参阅 http://jsbin.com/eneso3/5/edit

        3
  •  0
  •   Jason Sperske    15 年前

    你对“管道”的使用是正确的( http://www.tizag.com/xmlTutorial/xpathbar.php )因此,我能看到的唯一代码可能是关闭的,是第二个xpath命令中缺少+的代码,但这可能是伪代码,所以我只把它算作半个答案。至于最佳实践,在我看来,我会抓取subbar元素,然后在需要它们的地方抓取它的属性。类似于你建议的优化会混淆引用的数据。看起来太像是一个微型优化,但这只是一个观点。也许你有一个很长的属性列表,你真的节省了解析时间。