【问题标题】:Select first instance only with XPath?仅使用 XPath 选择第一个实例?
【发布时间】:2013-03-21 11:52:43
【问题描述】:

我正在解析一些类似这样的 XML:

<root>
    <some_gunk/>
    <dupe_node>
        ...
        stuff I want
        ...
    </dupe_node>
    <bits_and_pieces/>
    <other_gunk/>
    <dupe_node>
        ...
        stuff I don't want
        ...
    </dupe_node>
    <more_gunk/>
</root>

'//dupe_node' 的 XPath 将为我提供两个 dupe_node 实例供我使用。我只想遍历第一个。我可以用 XPath 做到这一点吗?

【问题讨论】:

    标签: xml xpath


    【解决方案1】:
    /descendant::dupe_node[1]
    

    //dupe_node[1] 通常是错误的,尽管在这种特殊情况下它会产生相同的结果。 See docs:

    位置路径//para[1] 与位置路径/descendant::para[1] 的含义不同。后者选择第一个后代 para 元素;前者选择作为其父母的第一个 para 孩子的所有后代 para 元素。

    给定以下 XML:

    <foo>
        <bar/>
        <foo>
            <bar/>
        </foo>
    </foo>
    

    //bar[1] 将产生两个节点,因为这两个条都是它们各自父节点的第一个子节点。

    /descendant::bar[1] 将只给出一个节点,它是文档中所有条的第一个。

    【讨论】:

    • 那么如果你想要第一个节点是后代或自我,你应该怎么写呢? /descendant::dupe_node[1] 排除自我对吗?
    【解决方案2】:
    //dupe_node[1]
    

    XPath 从 1 开始计数,在这种情况下不是 0。您可以使用此工具在浏览器中进行尝试:

    http://www.xmlme.com/XpathTool.aspx?mid=82

    【讨论】:

      【解决方案3】:

      //dupe_node[1]

      【讨论】:

        猜你喜欢
        • 2016-03-16
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多