0

我有一个这样的 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的子节点

像这样:

+Table +Capital Goods 商品 石油和天然气 - 综合

我怎样才能做到这一点?请建议

问候, 阿西夫·哈米德

4

1 回答 1

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>

斯图尔特。

于 2012-05-17T21:45:47.713 回答