2013-12-10 68 views
1

所有属性我有一个这样的XML:获得从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

目前尚不清楚,如果这是你问什么,但是这会给你所有的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> 
+0

谢谢,第一个应该适合我。我将调查一下XSLT。 –