示例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的新手(从SO填充列表框的代码)所以如果我到目前为止所做的任何事情都是不好的做法,请大声说出来。
答案 0 :(得分:1)
是的,如果您正在查看的值位于属性或子元素中,那么这样做会更容易,但仍然可以这样做。这将循环显示包含文本cmd
的{{1}}的所有cmdset
值:
Set 1
方括号建立条件,因此只包含该条件为真的元素。 For Each node As XmlNode In doc.SelectNodes("//cmdset[normalize-space(text())='Set 1']/cmd")
Dim value As String = node.InnerText
' ...
Next
函数是基本修剪文本以摆脱文本后的新行所必需的。
但是,从您的问题来看,这有点不清楚,如果这正是您的要求。如果您已经引用了所需的父元素,那么您可以简单地执行此操作:
normalize-space