我在下面有一个XML -
<document>
<node name="Node 0 Text here" ID="01" >aa
</node>
<node name="Node 1 Text here" ID="11">bb
</node>
<node name="Node 2 Text here" ID="12">cc
</node>
<node name="Node 3 Text here" ID="22">dd
</node>
<node name="Node 4 Text here" ID="23">ee
</node>
</document>
我需要在此XML中的特定节点中搜索内容。 如果该节点中不存在搜索关键字,那么我必须从当前节点的下一个节点开始搜索,你可以说兄弟姐妹。 如果该关键字在当前节点之后的所有节点中都不存在,那么它应该从开始开始搜索..
我必须在我的代码后面 - dotnet类中实现这一点。我用过 -
XmlNodeList xmlNodes = xd.SelectNodes("//12/following-sibling::*");
这里,12指的是当前节点的nodeid,它将作为参数传递。但我收到了错误。 任何帮助表示赞赏。
答案 0 :(得分:0)
我需要在此XML
中的特定节点中搜索内容
通过其内容获得节点匹配,XPath是:
node[contains(text(),'aa')]
这将返回第一个节点以及其内容文本包含aa
的任何其他节点。
如果该节点中不存在搜索关键字,那么我必须从当前节点的下一个节点开始搜索,你可以说兄弟姐妹。如果当前节点之后的所有节点中都不存在该关键字,那么它应该从开始开始搜索。
这句话对XPath没有多大意义。上面的表达式将返回与关键字匹配的所有节点。如果您想要第一个匹配的节点,您可以从XmlNodeList
之后或直接从XPath表达式将其更改为:
node[contains(text(),'aa')][1]
12指的是当前节点的nodeid,它将作为参数传递
这不正确。要按ID选择节点,您应该使用,例如:
node[@id=12]/text()
这将获得具有id=12
。
答案 1 :(得分:0)
使用强>:
(/*/node[ID='12']/following-sibling::*[contains(.,$pattern)][1]
|
/*/node[ID='12']/preceding-sibling::*[contains(.,$pattern)][1]
)
[last()]
此表达式选择两个所需选择中的最后一个 - 包含$pattern
值的以下第一个兄弟节点以及包含$pattern
值的前面第一个兄弟节点。< / p>
您需要将$pattern
替换为您想要搜索的确切值。