【问题标题】:how to get the text between two nodes using XPath如何使用 XPath 获取两个节点之间的文本
【发布时间】:2015-08-25 08:28:46
【问题描述】:

当节点具有相同的文本时,我不知道如何获取值。

这里是xml数据。

<dict>
    <key>VALUE1</key>
    <dict>
        <key>us</key>
        <string>Zubehör</string>
        <key>fr</key>
        <string>Accessories</string>
    </dict>

    <key>VALUE2</key>
    <dict>
        <key>us</key>
        <string>test2</string>
        <key>fr</key>
        <string>test</string>
    </dict>
</dict>

如何通过搜索文本Accessories 获得值VALUE1?真正的清单要大得多。给出的唯一文本是Accessories。有了它,我需要找到它父母的兄弟文本 --> VALUE1

【问题讨论】:

    标签: xml xpath xquery


    【解决方案1】:

    这是一种可能的方式,鉴于这样的描述和那个微小的 XML 示例:

    //dict[dict/string = 'Accessories']/key
    

    但我们不能确定这是否可以与实际的 XML 一起正常工作,因为发布的示例 XML 仅包含目标元素。

    更新:

    要响应更新的 XML 示例,您可以尝试这种方式:

    //dict/dict[string = 'Accessories']/preceding-sibling::key[1]
    

    xpath 定位包含关键字字符串的dict 元素,然后返回前面的第一个同级key 元素。

    【讨论】:

    • 您好,很抱歉给您带来更多困扰。我已经编辑了这个问题。发布的答案会找到所有键。编辑后的问题现在包含 2 个键。如果它适用于这 2 个,那么它应该适用于所有 400 个键。
    • 嘿伙计,我知道你可能很忙,但我在最后一部分没有运气。我如何让这个查询说过滤两个值?现在您的答案正确地找到了具有名为Accessories 的字符串的键,但是如何用键fr 显示具有名为Accessories 的字符串的键?基本上我试图过滤,但不仅仅是字符串,还有它的键。到目前为止,我已经尝试过了 //dict/dict[string = "Accessories"][key = 'fr']/preceding-sibling::key[1]/text() 。但是如何确保 string-ACCESSORIES 和 key-FR 紧挨着呢? .sry 来打扰你
    • 建议:这里不要依赖一个用户,一个人可能一次很忙,同时还有很多其他人愿意提供帮助。您现在要问的内容不在原始问题中,因此您可以为此发布一个新问题(它不会/不应被标记为该问题的重复),发布您目前拥有的 XPath,并通知我您通过上述评论发布了一个新问题。这样,如果我有时间,我知道在哪里可以进一步提供帮助,否则许多其他用户将有机会代替我帮助您。
    • 明白了。如果我找不到它,我会再弄乱它然后发布新问题。谢谢。
    • @Jai 试试这个方法://dict/dict[key[.='fr' and following-sibling::string[1][.='Accessories']]]/preceding-sibling::key[1]
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-05-04
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多