从XML获取所有属性

时间:2013-12-10 11:51:45

标签: xml vb.net

我有这样的XML:

<list>
    <sublist id="a">
        <item name="name1">
            <property1>a</property1>
            <property2>b</property2>
        </item>
        <item name="name2">
            <property1>c</property1>
            <property2>d</property2>
        </item>
    </sublist>
    <sublist id="b">
        [...more XML here...]
    </sublist>
</list>

我正在尝试仅从所有子列表中获取子列表id元素,因此我可以将其返回到像这样的新XML中:

<list>
    <sublist id="a">
    </sublist>
    <sublist id="b">
    </sublist>
    [...moreXML here....]
</list>

我正在尝试这个

Dim xPath As String = "//list"
xmlItems = xmlData.DocumentElement.SelectSingleNode(xPath)

但显然我得到了整个XML。我该如何返回新的XML? 感谢

1 个答案:

答案 0 :(得分:1)

目前尚不清楚这是否是您所要求的,但这会为您提供所有id值的列表:

Dim ids As New List(Of String)()
For Each i As XmlNode In xmlData.SelectNodes("//list/sublist/@id")
    ids.Add(i.Value)
Next

但是,我建议你也考虑使用XSLT来完成这项任务。 XSLT非常适合将XML从一种格式转换为另一种格式。例如,此XSLT脚本将您提供的XML转换为示例所需的输出:

<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
  <xsl:output method="xml" indent="yes"/>

  <xsl:template match="/list">
    <list>
      <xsl:apply-templates select="sublist"/>
    </list>
  </xsl:template>

  <xsl:template match="/list/sublist">
    <sublist>
      <xsl:attribute name="id">
        <xsl:value-of select="@id"/>
      </xsl:attribute>
    </sublist>
  </xsl:template>
</xsl:stylesheet>