データソースとして xmldatasource を取得するリストビューがあります。xmldatasource は動的に作成され、割り当てられます。を使用してデータをリストビューにバインドする直前に xpath を使用する
listview.datasource = myxmlsource
listview.DataBind()
を使用してノード要素のみが選択されxpath="root/node"
ます。したがって、xpath が適用された後の xml 構造は次のようになります。
<node name="Albert" age="32" desc="some random description" region="north"/>
<node name="Randy" age="32" desc="some random description" region="south"/>
<node name="Zebra" age="32" desc="some random description"region="east"/>
<node name="Bob" age="32" desc="some random description"region="south"/>
<node name="Carl" age="32" desc="some random description"region="north"/>
<node name="Denver" age="32" desc="some random description"region="east"/>
ルートがないことに注意してください。この XSLT をソートしようとしています。
ここでの目的は、xml を地域ごとにグループ化し、xml を名前で並べ替えることです。
私は XSLT に慣れていないので、かなり野獣のようです。
これまでのところ、私が思いつく 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 my" xmlns:my="http://tempuri.org"
>
<xsl:output method="xml" indent="yes"/>
<xsl:template name="@*|node()">
<xsl:copy>
<xsl:apply-templates select="@*|node() >
<xsl:sort select="@region" order="ascending"/>
<xsl:sort select="@name"/>
</xsl:apply-templates>
</xsl:copy>
</xsl:template>
</xsl:stylesheet>
地域でグループ化し、名前で並べ替えた後の期待される出力は次のとおりです。
<node name="Denver" age="32" desc="some random description"region="east"/>
<node name="Zebra" age="32" desc="some random description"region="east"/>
<node name="Albert" age="32" desc="some random description" region="north"/>
<node name="Carl" age="32" desc="some random description"region="north"/>
<node name="Bob" age="32" desc="some random description"region="south"/>
<node name="Randy" age="32" desc="some random description" region="south"/>
アップデート:
言い忘れましたが、地域ごとのグループ化の順序は必ずしも昇順または降順である必要はありませんが、北が最初、東が 2 番目、南が 3 番目などの任意のカスタム条件に基づくことができます。カスタムオーダーを実現する方法は?
私は次のことを試しましたが、同様のものをいくつか試しました。
このドキュメントには既に「DocumentElement」ノードがあります。
<?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="@*|node()">
<xsl:copy>
<xsl:apply-templates select="node[@region='north']" >
<xsl:sort select="@name"/>
</xsl:apply-templates>
</xsl:copy>
<xsl:copy>
<xsl:apply-templates select="node[@region='east']" >
<xsl:sort select="@name"/>
</xsl:apply-templates>
</xsl:copy>
<xsl:copy>
<xsl:apply-templates select="node[@region='south']" >
<xsl:sort select="@name"/>
</xsl:apply-templates>
</xsl:copy>
</xsl:template>
</xsl:stylesheet>