使用XPath使用JavaScript迭代XML文件中的子节点

时间:2014-10-16 19:07:11

标签: javascript xml xpath

给定格式的遗留输入XML文件:

<?xml version="1.0" ?>
<data>
<map>
    <key>title</key>
    <string>A Title Here</string>

    <key>description</key>
    <string>Description goes here</string>

    <key>elements</key>

    <map>
      <key>item1</key>
      <map>
        <key>name</key>
        <string>foo</string>
        <key>url</key>
        <string>http://foo.com</string>
      </map>

      <key>item2</key>
      <map>
        <key>name</key>
        <string>bar</string>
        <key>url</key>
        <string>http://bar.com</string>
      </map>

      <key>item3</key>
      <map>
        <key>name</key>
        <string>flasm</string>
        <key>url</key>
        <string>http://flasm.com</string>
      </map>

    </map>
</map>

使用Javascript,我想找到&#39;元素&#39;标记(并不总是在同一个地方)然后遍历其所有子项(&#39;项目&#39; N)并为每个子项收集键/字符串对(例如&#34; name = foo&#34;)< / p>

我曾尝试使用DOMReader和Xpath以多种方式执行此操作,但未能将其完全正确。

有谁能告诉我如何最好地做到这一点?

(这看起来不像我以前见过的其他XML,也许这就是为什么我在我发现的例子中使用它时遇到了麻烦,但就像我说的那样,它的遗产,我无法控制它。)

非常感谢。

1 个答案:

答案 0 :(得分:1)

我并不完全确定你的意思&#34;并不总是在同一个地方&#34;,如果你可以详细说明我可以提供更好的答案。但是,如果&#34;元素&#34;它的孩子(在你的例子中,&#39; ItemN&#39;不是孩子,但兄弟姐妹)可以嵌套不同,你可以只搜索文本内容,如下所示:

//*[contains(text(), 'elements')]/following-sibling::map/key[contains(text(), 'item1')]/following-sibling::map[1]

如果您正在寻找的子节点实际上是您示例中的下一个直接兄弟节点,那么这将为您提供您正在寻找的对。