2

xml ファイルのデータを変換するための XSLT がいくつかある ASP.NET Web ページがあります。XSLT はデータを操作し、テーブルに表示します。

ユーザーがテーブルの各見出しをクリックして、値を昇順または降順で並べ替えることができるようにすることはできますか?

バックエンド コードは VB.net にあります。

4

1 に答える 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:strip-space elements="*"/>

 <xsl:param name="pSortField" select="'age'"/>
 <xsl:param name="pSortOrder" select="'descending'"/>
 <xsl:param name="pSortDataType" select="'number'"/>

 <xsl:template match="/*">
     <xsl:copy>
       <xsl:for-each select="*">
         <xsl:sort select="*[name()=$pSortField]"
                   order="{$pSortOrder}" data-type="{$pSortDataType}"/>
         <xsl:copy-of select="."/>
       </xsl:for-each>
     </xsl:copy>
 </xsl:template>
</xsl:stylesheet>

この変換が次の XML ドキュメントに適用される場合:

<people>
  <person>
    <age>15</age>
    <name>Anna</name>
  </person>
  <person>
    <age>22</age>
    <name>Kim</name>
  </person>
  <person>
    <age>31</age>
    <name>Harry</name>
  </person>
  <person>
    <age>27</age>
    <name>Peter</name>
  </person>
</people>

必要な正しい結果が生成されます(すべてのperson要素が age で降順で並べ替えられます)。

<people>
   <person>
      <age>31</age>
      <name>Harry</name>
   </person>
   <person>
      <age>27</age>
      <name>Peter</name>
   </person>
   <person>
      <age>22</age>
      <name>Kim</name>
   </person>
   <person>
      <age>15</age>
      <name>Anna</name>
   </person>
</people>

パラメータの値を変更するだけで、他のソート結果が生成されます。

これらのパラメータで:

 <xsl:param name="pSortField" select="'name'"/>
 <xsl:param name="pSortOrder" select="'ascending'"/>
 <xsl:param name="pSortDataType" select="'text'"/>

結果は次のとおりです。

<people>
   <person>
      <age>15</age>
      <name>Anna</name>
   </person>
   <person>
      <age>31</age>
      <name>Harry</name>
   </person>
   <person>
      <age>22</age>
      <name>Kim</name>
   </person>
   <person>
      <age>27</age>
      <name>Peter</name>
   </person>
</people>
于 2012-04-24T13:40:22.923 に答える