用于ASP.Net TreeView控件的XML转换

时间:2012-01-18 13:01:00

标签: asp.net xml treeview

我不是一名XML专家,我正在努力解决这个问题:

我需要从XML dataSource填充ASP.Net Treeview控件。我通常可以做到这一点没有问题,除非在这种情况下,我提供的数据是这种格式:

<Staff>
<ID>1</ID>
<Name>Boss 1</Name>
<JobTitle>Top Boss</JobTitle>
<Staff>
    <ID>2</ID>
    <Name>Boss 2</Name>
    <JobTitle>2nd Top Boss</JobTitle>
    <Staff>
        <ID>3</ID>
        <Name>Boss 3</Name>
        <JobTitle>3rd Top Boss</JobTitle>
        <Staff>
            <ID>4</ID>
            <Name>Worker 1</Name>
            <JobTitle>Worker</JobTitle>
        </Staff>
    </Staff>
</Staff>
</Staff>

我需要它像树视图控件一样:

<Staff ID="1" Name="Boss 1" JobTitle="Top Boss">
  <Staff ID="2" Name="Boss 2" JobTitle="2nd Top Boss" >
    <Staff ID="3" Name="Boss 3" JobTitle="3rd Top Boss" >
        <Staff ID="4" Name="Worker 1" JobTitle="Worker" ></Staff>
    </Staff>
  </Staff>
</Staff>

我知道这应该是一个与xsl文件相关的轻而易举,但我失败了。我的最后一次尝试是:

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="Staff">
    <Staff>
        <xsl:apply-templates/>
    </Staff>
</xsl:template>

<xsl:template match="Staff">
    <Staff>
        <xsl:for-each select="*">
            <xsl:attribute name="{name()}">
                <xsl:value-of select="text()"/>
            </xsl:attribute>

        </xsl:for-each>
    </Staff>
</xsl:template>
</xsl:stylesheet>

有什么想法吗?

1 个答案:

答案 0 :(得分:0)

可以预见,我发布后30分钟就知道了。下面将上面的xml转换为所需的格式,并且似乎将任何xml元素转换为attibutes。

<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:msxsl="urn:schemas-microsoft-com:xslt" exclude-result-prefixes="msxsl">
<xsl:template match="*">
    <xsl:copy>
        <xsl:for-each select="@*|*[not(* or @*)]">
            <xsl:attribute name="{name(.)}">
                <xsl:value-of select="."/>
            </xsl:attribute>
        </xsl:for-each>
        <xsl:apply-templates select="*[* or @*]|text()"/>
    </xsl:copy>
</xsl:template>