如何从下一个节点获取内容

时间:2011-06-16 07:55:56

标签: xpath

我在下面有一个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,它将作为参数传递。但我收到了错误。   任何帮助表示赞赏。

2 个答案:

答案 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替换为您想要搜索的确切值。