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

时间:2010-10-05 17:46:28

标签: xml xslt xsd tree structure

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

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

基本上我想要一个嵌套的树结构,所以我可以简单地绑定到我的treeview控件。所以Category包含SubCategoryName并且包含Filename并且包含xmldefinition

抱歉,我希望这是有道理的,谢谢

2 个答案:

答案 0 :(得分:2)

此样式表:

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

答案 1 :(得分:1)

此转化:

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