Xml 如果特定同级节点与特定子节点一起出现,请选择元素

Xml 如果特定同级节点与特定子节点一起出现,请选择元素,xml,xpath,Xml,Xpath,我正在尝试选择具有下一个同级节点dict且其子节点之一为true的所有键,例如在以下xml中: <dict> <key>A</key> <dict> <key>Disabled</key> <true/> </dict> <key>B</key> <dict> <key&g

我正在尝试选择具有下一个同级节点dict且其子节点之一为true的所有键,例如在以下xml中:

<dict>
    <key>A</key>
    <dict>
        <key>Disabled</key>
        <true/>
    </dict>
    <key>B</key>
    <dict>
        <key>Disabled</key>
        <false/>
    </dict>
    <key>C</key>
    <dict>
        <key>Disabled</key>
        <true/>
    </dict>
    <key>D</key>
    <id>1</id>
</dict>
还有很多其他的。任何帮助都将不胜感激。

您可以尝试以下方法:

//key[following-sibling::dict[position()=1]/true]
这将选择以下
dict
元素,这些元素的
position()
值为1(即紧跟
键的
以及
true
的后代)

following sibling::node()
选择所有以下同级,但
following sibling::node()[position()=1]
仅选择第一个节点。

您可以尝试以下操作:

//key[following-sibling::dict[position()=1]/true]
这将选择以下
dict
元素,这些元素的
position()
值为1(即紧跟
键的
以及
true
的后代)

following sibling::node()
选择所有以下同级,但
following sibling::node()[position()=1]
仅选择第一个节点。

您可以尝试以下操作:

//key[following-sibling::dict[position()=1]/true]
这将选择以下
dict
元素,这些元素的
position()
值为1(即紧跟
键的
以及
true
的后代)

following sibling::node()
选择所有以下同级,但
following sibling::node()[position()=1]
仅选择第一个节点。

您可以尝试以下操作:

//key[following-sibling::dict[position()=1]/true]
这将选择以下
dict
元素,这些元素的
position()
值为1(即紧跟
键的
以及
true
的后代)


following sibling::node()
选择ALL以下同级,但
following sibling::node()[position()=1]
仅选择第一个路径表达式。

需要的路径表达式是

/dict/key[following-sibling::*[position() = 1 and name() = 'dict' and true]]
也就是说

/dict/key                Select an outermost element, and its children `key`
[following-sibling::*    but only if there is a following sibling
[position() = 1          that is the first following sibling
and name() = 'dict'      and that is also a `dict` element
and true]]               that has at least one child element named `true`.
将显示的文档作为输入,结果如下(单个结果用
------------
分隔):


您需要的路径表达式是

/dict/key[following-sibling::*[position() = 1 and name() = 'dict' and true]]
也就是说

/dict/key                Select an outermost element, and its children `key`
[following-sibling::*    but only if there is a following sibling
[position() = 1          that is the first following sibling
and name() = 'dict'      and that is also a `dict` element
and true]]               that has at least one child element named `true`.
将显示的文档作为输入,结果如下(单个结果用
------------
分隔):


您需要的路径表达式是

/dict/key[following-sibling::*[position() = 1 and name() = 'dict' and true]]
也就是说

/dict/key                Select an outermost element, and its children `key`
[following-sibling::*    but only if there is a following sibling
[position() = 1          that is the first following sibling
and name() = 'dict'      and that is also a `dict` element
and true]]               that has at least one child element named `true`.
将显示的文档作为输入,结果如下(单个结果用
------------
分隔):


您需要的路径表达式是

/dict/key[following-sibling::*[position() = 1 and name() = 'dict' and true]]
也就是说

/dict/key                Select an outermost element, and its children `key`
[following-sibling::*    but only if there is a following sibling
[position() = 1          that is the first following sibling
and name() = 'dict'      and that is also a `dict` element
and true]]               that has at least one child element named `true`.
将显示的文档作为输入,结果如下(单个结果用
------------
分隔):



实际上,您的路径表达式还将选择没有命名为
dict
的下一个同级元素的
key
元素,因为
后面的同级元素::dict[position()=1]
表示“当前上下文节点之后的第一个
dict
元素”,通常不是下面的第一个同级。不,xpath没有返回任何结果。@orange,不确定您的环境,但在您的xml示例中,我的xpath确实返回了预期的结果。@orange否,此表达式肯定是正确的-要么您做错了什么,要么输入文档不是您显示给我们的。是的这个查询在nokogiri中运行得很好!由于这些在线工具很少,他们找不到一个好的符合开放源码标准的xpath库来使用??如果你们不来解救我,我本可以轻松地再花上几个小时:)实际上,您的路径表达式还将选择没有命名为
dict
的下一个同级元素的
key
元素,因为
后面的同级元素::dict[position()=1]
表示“当前上下文节点之后的第一个
dict
元素”,通常不是下面的第一个同级。不,xpath没有返回任何结果。@orange,不确定您的环境,但在您的xml示例中,我的xpath确实返回了预期的结果。@orange否,此表达式肯定是正确的-要么您做错了什么,要么输入文档不是您显示给我们的。是的这个查询在nokogiri中运行得很好!由于这些在线工具很少,他们找不到一个好的符合开放源码标准的xpath库来使用??如果你们不来解救我,我本可以轻松地再花上几个小时:)实际上,您的路径表达式还将选择没有命名为
dict
的下一个同级元素的
key
元素,因为
后面的同级元素::dict[position()=1]
表示“当前上下文节点之后的第一个
dict
元素”,通常不是下面的第一个同级。不,xpath没有返回任何结果。@orange,不确定您的环境,但在您的xml示例中,我的xpath确实返回了预期的结果。@orange否,此表达式肯定是正确的-要么您做错了什么,要么输入文档不是您显示给我们的。是的这个查询在nokogiri中运行得很好!由于这些在线工具很少,他们找不到一个好的符合开放源码标准的xpath库来使用??如果你们不来解救我,我本可以轻松地再花上几个小时:)实际上,您的路径表达式还将选择没有命名为
dict
的下一个同级元素的
key
元素,因为
后面的同级元素::dict[position()=1]
表示“当前上下文节点之后的第一个
dict
元素”,通常不是下面的第一个兄弟。不,xpath没有返回任何结果。@orange,不确定您的环境,但在您的xml示例中,我的xpath确实返回了预期的结果。@orange不,这个表达式肯定是正确的-或者您正在做某事