修改XML结构以使用XSD或XSLT创建嵌套的树XML结构

修改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

我想知道是否有人能帮忙,因为事情很紧急。我需要将一个xml文件的结构转换为另一个xml结构,以便将其绑定到asp.net treeview控件(我是一名c#开发人员)。我注意到asp.net treeview控件接受转换文件或xpath表达式,我想知道是否有人知道可以使用的解决方案,请: 从


卡托
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('&lt;',.,'/&gt;')"/>
    </xsl:template>
</xsl:stylesheet>

输出:

<Skeleton>
    <Category>Carto
        <SubCategoryName>ET-ET-RS23
            <Filename>V-01.XML
                <XmlDefinition>&lt;SKELETON/&gt;</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()">
  &lt;<xsl:value-of select="."/>/&gt;
 </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>
  &lt;SKELETON/&gt;
                </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>
  &lt;SKELETON/&gt;
                </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节点/元素??