转换XML文档以与.NET 2.0 TreeView控件一起使用
我有一个XML文件,格式如下:转换XML文档以与.NET 2.0 TreeView控件一起使用,xml,xslt,treeview,.net-2.0,xslt-1.0,Xml,Xslt,Treeview,.net 2.0,Xslt 1.0,我有一个XML文件,格式如下: <root> <category> <doctype> <name>Doc1</name> <site> <name>Site1</name> <target>iframe</target> <url>http://www.gmail.com</
<root>
<category>
<doctype>
<name>Doc1</name>
<site>
<name>Site1</name>
<target>iframe</target>
<url>http://www.gmail.com</url>
</site>
</doctype>
<doctype>
<name>Doc2</name>
<site>
<name>Site2</name>
<target>iframe</target>
<url>http://www.bbc.co.uk</url>
</site>
</doctype>
</category>
</root>
文件1
地点1
iframe
http://www.gmail.com
文档2
站点2
iframe
http://www.bbc.co.uk
我需要在标准的.NET2.0TreeView控件上使用它,该控件需要以下格式的XML
<root>
<category>
<doctype name="Doc1">
<site name = "Site1" target = "iframe" url = "http://www.gmail.com">
</site>
</doctype>
<doctype name="Doc2">
<site name = "Site2" target = "iframe" url = "http://www.bbc.co.uk">
</site>
</doctype>
</category>
</root>
最大的复杂性是DOCTYPE节点的一些子节点需要转换为属性(即名称),而一些子节点则保留为需要自己属性(即站点)的子节点
如何使用XSLT实现这一点?下面的XSLT1.0转换实现了您的目标
<xsl:stylesheet
version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="root | category | doctype | site">
<xsl:copy>
<xsl:apply-templates select="*" />
</xsl:copy>
</xsl:template>
<xsl:template match="name | target | url">
<xsl:attribute name="{local-name()}">
<xsl:value-of select="." />
</xsl:attribute>
</xsl:template>
</xsl:stylesheet>
输出:
<root>
<category>
<doctype name="Doc1">
<site name="Site1" target="iframe" url="http://www.gmail.com"></site>
</doctype>
<doctype name="Doc2">
<site name="Site2" target="iframe" url="http://www.bbc.co.uk"></site>
</doctype>
</category>
</root>
如果您能确定名称的一致性,我的答案中的转换将变得简单得多。另外,我有点不确定您的输入XML是否真的有引号。你能确认一下吗?抱歉,我试图模仿我实际得到的,但没有注意到这个案例&忘记了引用。我改变了答案以适应你的新问题。你会发现现在简单多了。我想为修改后的问题推荐一个更简单的解决方案。谢谢