【问题标题】:Read certain child elements from specific parent element从特定父元素中读取特定子元素
【发布时间】:2013-02-23 05:17:29
【问题描述】:

示例 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>

目前我有一个填充&lt;cmdset&gt; 元素的列表框。代码是;

    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

我现在希望能够处理特定 &lt;cmdset&gt; 元素中的某些子元素,在此示例中仅处理 &lt;cmd&gt; 元素,而不是 &lt;comment&gt; 元素。所以如果在列表框中选择了Set 1,我只想处理文本“Command 1”和“Command 2”。

我被告知给元素一个 ID 或名称会使事情变得更容易,但我想尽可能避免这种情况,因为我希望最终用户可以编辑 XML(有时不是很技术性)所以我试图让事情尽可能简单。

我尝试了各种不同的想法,但都无济于事,我是 XML 新手(从 SO 获得了填充列表框的代码),所以如果到目前为止我所做的任何事情都是不好的做法,请大声疾呼。

【问题讨论】:

  • 所以你希望它使用text() = "Set 1 作为条件?

标签: xml vb.net parent-child


【解决方案1】:

是的,如果您正在查看的值位于属性或子元素中,这样做会更容易,但仍然可以这样做。这将遍历包含文本 Set 1cmdset 的所有 cmd 值:

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

【讨论】:

  • 全部整理完毕,谢谢。你在这里变成了熟悉的面孔。我想你现在已经回答了我最后的 2 或 3 个问题。谢谢!
猜你喜欢
  • 1970-01-01
  • 2021-09-07
  • 2021-03-30
  • 2013-04-17
  • 1970-01-01
  • 1970-01-01
  • 2016-07-18
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多