修改XML结构以使用XSD或XSLT创建嵌套树XML结构
请我想知道是否有人可以请求帮助,因为它相当紧迫。我需要将xml文件的结构转换为另一个xml结构,以便将其绑定到asp.net treeview控件(我是c#开发人员)。我注意到asp.net TreeView控件接受转换文件或XPath表达式,如果一个解决方案,将工作请一些人知道我想知道: 从修改XML结构以使用XSD或XSLT创建嵌套树XML结构
<Skeleton>
<Category>Carto</Category>
<SubCategoryName>ET-ET-RS23</SubCategoryName>
<Filename>V-01.XML</Filename>
<XmlDefinition>SKELETON</XmlDefinition>
</Skeleton>
<Skeleton>
<Category>Carto
<SubCategoryName>ET-ET-RS23
<Filename>V-01.XML
<XmlDefinition><SKELETON /></XmlDefinition>
</Filename>
</SubCategoryName>
</Category>
</Skeleton>
基本上我想有一个嵌套的树结构,我可以简单地绑定到我的树视图控件。因此,类别包含SubCategoryName以及包含文件名和包含xmldefinition
抱歉,我希望这是有道理的,谢谢
这个样式表:
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="node()">
<xsl:copy>
<xsl:apply-templates select="node()[1]|
following-sibling::node()[1]"/>
</xsl:copy>
</xsl:template>
<xsl:template match="XmlDefinition/text()">
<xsl:value-of select="concat('<',.,'/>')"/>
</xsl:template>
</xsl:stylesheet>
输出:
<Skeleton>
<Category>Carto
<SubCategoryName>ET-ET-RS23
<Filename>V-01.XML
<XmlDefinition><SKELETON/></XmlDefinition>
</Filename>
</SubCategoryName>
</Category>
</Skeleton>
+1给你和@Dimitre用于如此紧密匹配彼此的解决方案。英雄所见略同。 ;-) – LarsH 2010-10-05 19:06:37
@LarsH,@Alejandro:如果两个不同的头脑(亚历杭德罗和我的大多数人肯定都会)达到几乎相同的解决方案,这就是事实。 Jae! – 2010-10-05 19:28:42
Ja!我非常感谢你的评论,但我不认为自己是一个伟大的思想。 ;) – 2010-10-05 20:02:10
这转化:
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output omit-xml-declaration="yes" indent="yes"/>
<xsl:template match="node()">
<xsl:copy>
<xsl:apply-templates select="node()[1]"/>
<xsl:apply-templates select="following-sibling::node()[1]"/>
</xsl:copy>
</xsl:template>
<xsl:template match="XmlDefinition/text()">
<<xsl:value-of select="."/>/>
</xsl:template>
</xsl:stylesheet>
当所提供的XML文档施加:
<Skeleton>
<Category>Carto</Category>
<SubCategoryName>ET-ET-RS23</SubCategoryName>
<Filename>V-01.XML</Filename>
<XmlDefinition>SKELETON</XmlDefinition>
</Skeleton>
产生想要的结果:
<Skeleton>
<Category>Carto
<SubCategoryName>ET-ET-RS23
<Filename>V-01.XML
<XmlDefinition>
<SKELETON/>
</XmlDefinition>
</Filename>
</SubCategoryName>
</Category>
</Skeleton>
你好,我试过这个,但我得到CartoET-ET-R23V-01.XML
我希望能得到你在结果中描述的实际xml结构..am我做错了什么? – 2010-10-05 19:29:52
@ michael-bullock:如果你有'
好问题(1)。查看我的答案,获取完整而简短的解决方案。 – 2010-10-05 18:29:26
Ew,混合内容。 (文本作为元素的兄弟。) – LarsH 2010-10-05 19:04:02