基于ParentId的XML到树视图

时间:2012-05-17 16:14:50

标签: c# asp.net xml vb.net

我有这样的XML:

<table name="tblcats">
<row>
        <Id>1741</Id>
        <Industry>Oil &amp; Gas - Integrated</Industry>
        <ParentId>1691</ParentId>
    </row>
    <row>
        <Id>1690</Id>
        <Industry>Commodities</Industry>
        <ParentId>1691</ParentId>
    </row>
    <row>
        <Id>1691</Id>
        <Industry>Capital Goods</Industry>
        <ParentId>0</ParentId>
    </row>
</table>

我想从这个XML创建一个Treeview,以便表是父节点,然后节点ParentId 0是第二个父节点,然后是父节点ID大于0的子节点

像这样:

+表     +资本货物        商品        油和油气体 - 集成

我该怎么做?请建议

此致 Asif Hameed

1 个答案:

答案 0 :(得分:1)

一种相当简单的方法是使用标准的ASP.NET控件XmlDataSource和TreeView,并使用XSLT转换文件将您拥有的XML转换为TreeView控件喜欢的内容。

因此,假设您在名为cats.xml的文件中包含上述XML,则ASP.NET页面标记将如下所示:

<asp:XmlDataSource ID="CatsXml" runat="server" DataFile="~/cats.xml" TransformFile="~/cats.xslt"></asp:XmlDataSource>
<asp:TreeView ID="CatsTree" runat="server" DataSourceID="CatsXml">
    <DataBindings><asp:TreeNodeBinding TextField="name" ValueField="id" /></DataBindings>
</asp:TreeView>

和XSLT文件(cats.xslt)将是:

<?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:output method="xml" indent="yes"/>

  <xsl:template match="table">
    <table id="-1" name="Table">
      <xsl:for-each select="/table/row[ParentId = 0]">
        <industry>
          <xsl:attribute name="id">
            <xsl:value-of select="Id"/>
          </xsl:attribute>
          <xsl:attribute name="name">
            <xsl:value-of select="Industry"/>
          </xsl:attribute>
          <xsl:call-template name="industry-template">
            <xsl:with-param name="pId" select="Id" />
          </xsl:call-template>
        </industry>
      </xsl:for-each>
    </table>
  </xsl:template>

  <xsl:template name="industry-template">
    <xsl:param name="pId" />
    <xsl:for-each select="/table/row[ParentId = $pId]">
      <industry>
        <xsl:attribute name="id">
          <xsl:value-of select="Id"/>
        </xsl:attribute>
        <xsl:attribute name="name">
          <xsl:value-of select="Industry"/>
        </xsl:attribute>
        <xsl:call-template name="industry-template">
          <xsl:with-param name="pId" select="Id" />
        </xsl:call-template>
      </industry>
    </xsl:for-each>
  </xsl:template>

</xsl:stylesheet>

斯图尔特。