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

标签 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,我想找到“elements”标签(并不总是在同一个地方),然后迭代它的所有子项(“item”N)并收集每个标签的键/字符串对(例如“name= foo”)

我尝试使用 DOMReader 和 Xpath 通过多种方式实现此目的,但一直未能完全正确。

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

(这看起来不像我见过的其他 XML,所以也许这就是为什么我在找到的示例中使用它时遇到麻烦,但正如我所说,它是遗留的,我无法控制它)。

非常感谢。

最佳答案

我不完全确定你所说的“不总是在同一个地方”是什么意思,如果你能详细说明,我也许能够提供更好的答案。但是,如果“elements”及其子项(在您的示例中,“ItemN”不是子项,而是兄弟项)可以以不同方式嵌套,则您可以仅按文本内容进行搜索,如下所示:

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

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

关于javascript - 使用 XPath 使用 JavaScript 迭代 XML 文件中的子节点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26412035/

相关文章:

xml - Xpath 通过将基本 URL 与从 Xml 获得的字符串组合来获取完整 URL

javascript - 带转发器的 AngularJS 指令

javascript - 如何重置 angularjs 中的禁用值

javascript - 输入类型占位符在所有浏览器中的工作方式不同

javascript - 为什么我的 Google 应用程序脚本出现系统标识符错误

xml - findnodes() 中的 xpath 表达式返回空节点列表

刷新父窗口时Javascript : get current window. open()

c# - 通过 linq to xml 选择属性值

java - 使用 XMLUnit 忽略大小写

selenium - 使用 xpath 查找我的跨度文本