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 が 2 番目の親、次に Parent Id が 0 より大きい子ノードになるようにします。

このような:

+表 +資本財 商品 石油・ガス - 統合

これどうやってするの?提案してください

よろしく、 アシフ・ハメド

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 に答える