2013-02-22 74 views
1

示例XML;從特定父元素讀取某些子元素

<root> 
<cmdset>Set 1 
    <comment>Comment 1 here.</comment> 
    <cmd>Command 1</cmd> 
    <cmd>Command 2</cmd> 
</cmdset> 

<cmdset>Set 2 
    <comment>Comment 2 here.</comment> 
    <cmd>Command 3</cmd> 
    <cmd>Command 4</cmd> 
</cmdset> 
</root> 

目前我有一個列表框填充<cmdset>元素。代碼是;

Dim doc As XmlDocument = New XmlDocument() 
    doc.Load("help.xml") 
    For Each textNode As XmlText In doc.SelectNodes("//cmdset/text()") 
     listCmdSet.Items.Add(textNode.InnerText) 
    Next 

其中輸出到列表框;

Set 1 
Set 2 

我現在希望能夠給特定<cmdset>元素內處理某些子元素,只是在這個例子中,<cmd>元素,而不是<comment>元素。所以如果在列表框中選擇了Set 1,我只想處理文本「Command 1」和「Command 2」。

我被告知給元素一個ID或一個名字會讓事情變得更簡單,但是我想盡可能地避免這種情況,因爲我打算XML可以被最終用戶編輯(有時候不是很技術)儘可能保持簡單。

我已經嘗試了各種不同的想法,但無濟於事,我是新來的XML(得到的代碼來填充從這樣的列表框),所以如果我迄今做的任何事情是不好的做法,請大喊。

+0

所以,你希望它使用'文本()=「設置1'是條件 – 2013-02-22 20:59:48

回答

1

是的,如果您正在查看的值是屬於某個屬性或子元素,但是仍然可以執行此操作,則會更容易。通過所有的cmd值這將環路包含文本Set 1cmdset

For Each node As XmlNode In doc.SelectNodes("//cmdset[normalize-space(text())='Set 1']/cmd") 
    Dim value As String = node.InnerText 
    ' ... 
Next 

方括號建立的條件,所以只有在這個條件是真實的元素將被包括在內。 normalize-space函數是必要的,從本質上修剪文本以擺脫文本之後的新行。

但是,從你的問題來看,這有點不清楚,如果這正是你所要求的。如果你已經擁有所需的父元素的引用,那麼你可以簡單地這樣做:

Dim cmdsetElement As XmlElement = ' ... 
For Each node As XmlNode in cmdsetElement.SelectNodes("cmd") 
    Dim value As String = node.InnerText 
    ' ... 
Next 
+1

現在所有排序,?謝謝,你在這裏變成熟悉的面孔,我認爲你已經回答了我最近的2或3個問題,謝謝! – 2013-02-22 22:48:37

相關問題