2011-06-16 68 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

相關問題