2011-06-16 42 views
1

获取内容我都低于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

迄今为止,我接受了我所有问题的答案。请让我知道还有什么要做? – contactkx 2011-06-16 08:15:18

+0

你说你有一个xpath表达式,但是不能正确的。你能告诉我们你试过了什么吗? – 2011-06-16 08:16:43

+0

我用--XmlNodeList xmlNodes = xd.SelectNodes(“// 12/following-sibling :: *”);这里,12表示当前节点的nodeid,它将作为参数传递。 – contactkx 2011-06-16 09:00:56

回答

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内容。

+0

感谢empo,我会试试这个。 – contactkx 2011-06-17 06:44:14

+0

不客气。请记住提供您的反馈。 – 2011-06-17 06:51:32

0

使用

(/*/node[ID='12']/following-sibling::*[contains(.,$pattern)][1] 
    | 
    /*/node[ID='12']/preceding-sibling::*[contains(.,$pattern)][1] 
) 
    [last()] 

该表达式选择最后从两通缉商品 - 以下兄弟姐妹包含的$pattern的值和所述第一前述的兄弟姐妹的第一包含值$pattern

您需要用您想要的确切值替代$pattern

相关问题