Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/xml/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Xml 如何使用XPath获取两个节点之间的文本_Xml_Xpath_Xquery - Fatal编程技术网

Xml 如何使用XPath获取两个节点之间的文本

Xml 如何使用XPath获取两个节点之间的文本,xml,xpath,xquery,Xml,Xpath,Xquery,当节点具有相同的文本时,我不知道如何获取值 下面是xml数据 <dict> <key>VALUE1</key> <dict> <key>us</key> <string>Zubehör</string> <key>fr</key> <string>Accessories</stri

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

下面是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>

价值1
我们
祖贝尔
fr
配件
价值2
我们
测试2
fr
测试

如何通过搜索文本
附件
,获取值
VALUE1
?真正的清单要大得多。给出的唯一文本是
附件
。有了它,我需要找到它的父对象的同级文本-->
VALUE1

,这是一种可能的方法,考虑到这样的描述和小样本XML:

//dict[dict/string = 'Accessories']/key
但是,我们不能充分肯定,这将正确地处理实际的XML,因为发布的示例XML只包含目标元素

更新:

要响应更新的XML示例,可以尝试以下方法:

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

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

这是一种可能的方法,考虑到这样的描述和小样本XML:

//dict[dict/string = 'Accessories']/key
但是,我们不能充分肯定,这将正确地处理实际的XML,因为发布的示例XML只包含目标元素

更新:

要响应更新的XML示例,可以尝试以下方法:

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

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

这是一种可能的方法,考虑到这样的描述和小样本XML:

//dict[dict/string = 'Accessories']/key
但是,我们不能充分肯定,这将正确地处理实际的XML,因为发布的示例XML只包含目标元素

更新:

要响应更新的XML示例,可以尝试以下方法:

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

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

这是一种可能的方法,考虑到这样的描述和小样本XML:

//dict[dict/string = 'Accessories']/key
但是,我们不能充分肯定,这将正确地处理实际的XML,因为发布的示例XML只包含目标元素

更新:

要响应更新的XML示例,可以尝试以下方法:

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


xpath定位包含关键字字符串的
dict
元素,然后返回前面的第一个同级
key
元素。我已经编辑了这个问题。发布的答案会找到所有的钥匙。编辑的问题现在包含2个键。如果它适用于这两个,那么它应该适用于所有400个键。嘿,伙计,我知道你可能很忙,但我在这最后一部分没有运气。我如何使这个查询表示按两个值过滤?现在,您的答案正确地找到了包含名为
附件
的字符串的钥匙,但是如何用钥匙
fr
显示包含名为
附件
的字符串的钥匙呢?基本上,我在尝试过滤,但不仅仅是字符串,还通过它的键。到目前为止,我已经试过了//dict/dict[string=“associates”][key='fr']/previous sibling::key[1]/text()。但如何确保弦配件和键FR紧挨在一起呢。sry to bug uSuggestion:这里不要依赖于一个用户,一个用户可能一次都很忙,同时许多其他用户也随时准备提供帮助。您现在提出的问题不在原始问题中,因此您可以为此发布一个新问题(它不会/不应该被标记为此问题的副本),发布到目前为止的XPath,并通过如上所述的注释通知我您发布了一个新问题。这样,如果我有时间,我知道在哪里可以进一步帮助,否则许多其他用户将有机会代替我来帮助你。明白。如果我找不到的话,我会把它弄得一团糟,然后再发新问题。谢谢。@Jai请尝试以下方法:
//dict/dict[key[.='fr'和后面的兄弟姐妹::string[1][.='Accessories']]]/前面的兄弟姐妹::key[1]
您好,很抱歉给您带来更多麻烦。我已经编辑了这个问题。发布的答案会找到所有的钥匙。编辑的问题现在包含2个键。如果它适用于这两个,那么它应该适用于所有400个键。嘿,伙计,我知道你可能很忙,但我在这最后一部分没有运气。我如何使这个查询表示按两个值过滤?现在,您的答案正确地找到了包含名为
附件
的字符串的钥匙,但是如何用钥匙
fr
显示包含名为
附件
的字符串的钥匙呢?基本上,我在尝试过滤,但不仅仅是字符串,还通过它的键。到目前为止,我已经试过了//dict/dict[string=“associates”][key='fr']/previous sibling::key[1]/text()。但如何确保弦配件和键FR紧挨在一起呢。sry to bug uSuggestion:这里不要依赖于一个用户,一个用户可能一次都很忙,同时许多其他用户也随时准备提供帮助。您现在提出的问题不在原始问题中,因此您可以为此发布一个新问题(它不会/不应该被标记为此问题的副本),发布到目前为止的XPath,并通过如上所述的注释通知我您发布了一个新问题。这样,如果我有时间,我知道在哪里可以进一步帮助,否则许多其他用户将有机会代替我来帮助你。明白。如果我找不到的话,我会把它弄得一团糟,然后再发新问题。谢谢。@Jai请尝试以下方法:
//dict/dict[key[.='fr'和后面的兄弟姐妹::string[1][.='Accessories']]]/前面的兄弟姐妹::key[1]
您好,很抱歉给您带来更多麻烦。我已经编辑了这个问题。发布的答案会找到所有的钥匙。编辑的问题现在包含2个键。如果它适用于这两个,那么它应该适用于所有400个键。嘿,伙计,我知道你可能很忙,但我在这最后一部分没有运气。我如何使这个查询表示按两个值过滤?现在你的答案是