我有这样的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? 感谢
答案 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>