修改XML结构以使用XSD或XSLT创建嵌套的树XML结构
我想知道是否有人能帮忙,因为事情很紧急。我需要将一个xml文件的结构转换为另一个xml结构,以便将其绑定到asp.net treeview控件(我是一名c#开发人员)。我注意到asp.net treeview控件接受转换文件或xpath表达式,我想知道是否有人知道可以使用的解决方案,请: 从修改XML结构以使用XSD或XSLT创建嵌套的树XML结构,xml,xslt,xsd,tree,structure,Xml,Xslt,Xsd,Tree,Structure,我想知道是否有人能帮忙,因为事情很紧急。我需要将一个xml文件的结构转换为另一个xml结构,以便将其绑定到asp.net treeview控件(我是一名c#开发人员)。我注意到asp.net treeview控件接受转换文件或xpath表达式,我想知道是否有人知道可以使用的解决方案,请: 从 卡托 ET-ET-RS23 V-01.XML 骨架 卡托 ET-ET-RS23 V-01.XML 骨架/ 基本上,我希望有一个嵌套的树结构,这样我就可以简单地绑定到我的treeview控件。所以Cate
卡托
ET-ET-RS23
V-01.XML
骨架
卡托
ET-ET-RS23
V-01.XML
骨架/
基本上,我希望有一个嵌套的树结构,这样我就可以简单地绑定到我的treeview控件。所以Category包含子Category name,它包含Filename,它包含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>
卡托
ET-ET-RS23
V-01.XML
骨架/
此转换:
<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>
卡托
ET-ET-RS23
V-01.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>
卡托
ET-ET-RS23
V-01.XML
骨架/
好问题(+1)。请参阅我的答案以获得完整而简短的解决方案。Ew,混合内容。(文本作为元素的兄弟。)+1感谢您和@Dimitre如此紧密地匹配彼此的解决方案。英雄所见略同@拉尔斯,@Alejandro:如果两个不同的想法(Alejandro和我的想法很明显)得出几乎相同的解决方案,这就是事实。是的!我真的很感激你的评论,但我认为自己不是一个伟大的人我希望得到您在结果中描述的实际xml结构..我做错了什么吗?@michael bullock:如果您有Hi Dimitre,对不起,我不确定我是否理解,您会得到这样的结果。我想将我的xml文件转换为结果中显示的xml文件。这样我就可以以新的方式导航节点,即Category,然后是child node subcategory name等等。我希望xsl能够转换节点结构,这样我就可以导航新的子节点。我现在做的是将xsl代码保存为.xsl文件。然后,我将包含原始xml结构的xml文件与xsl文件链接起来。当我打开xml文件时,我看到一行文本,它们是连接在一起的值???@michael bullock:现在我不明白了。您所说的包含原始xml结构和xsl文件的“链接xml文件”是什么意思" ? 我认为IE不能以这种方式执行嵌套转换。通过链接,我的意思是我有一个原始xml结构的xml文件。当我在IE中打开它时,可以看到与我在问题中描述的完全相同的原始xml节点结构和值。然后,我获取您的xsl代码,将其保存到.xsl文件中,然后在原始xml文件中引用/声明xsl文件。当我在IE中打开xml文件时,我看到一行串联的值。我希望看到新的节点结构和值,如您的结果所示??是我做错了什么,还是xsl只处理值而不输出xmnl节点/元素??