- ベストアンサー
xsl:sortを子要素で
こんにちは。いつもお世話になっています <a hoge="hoge"> <b id="1"> <b id="3"> </a> <a hoge="hogehoge"> <b id="2"> </a> このような構造のxmlで、xslを使用して <b id="1"> <b id="2"> <b id="3"> のような出力を得たいと思っています。 <xsl:apply-templates><xsl:sort select="b" /><xsl:apply-templates> では上手くいきませんでした。 何か方法があるでしょうか
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
><b id="2" />は表示しないものを作ってみました。 <xsl:template match="/"> <xsl:for-each select="//a/b[@id!='2']"> <xsl:sort select="./@id" data-type="number"/> <xsl:copy-of select="." /> </xsl:for-each> </xsl:template> としてみはどうでしょうか
その他の回答 (1)
- BLUEPIXY
- ベストアンサー率50% (3003/5914)
<xsl:template match="/"> <xsl:for-each select="//a/b"> <xsl:sort select="./@id" data-type="number"/> <xsl:copy-of select="." /> </xsl:for-each> </xsl:template>
補足
投稿が遅くなってすみません。 ------------------------- 質問の訂正 <xsl:apply-templates><xsl:sort select="b" /><xsl:apply-templates> ↓ <xsl:apply-templates><xsl:sort select="b/@id" /><xsl:apply-templates> <b ~~ > ↓ <b ~~ /> ------------------------- これを他のxslからimportで参照して、そこで <xsl:template match="b[id!='2']"></xsl:template> のようにし、xsl毎に表示内容を変えたいと思っています。 試しに、<b id="2" />は表示しないものを作ってみました。 --style.xsl-- <xsl:for-each select="//a/b"> <xsl:sort select="./@id" /> <xsl:apply-templates /></xsl:for-each> --style2.xsl-- style.xslをインポートする処理 <xsl:template match="b[@id!='2']" /> </xsl:template> のようにすると、style2.xslのtemplateは無視されてしまいます。何か良い方法はあるでしょうか。
お礼
ありがとうございます、試してみます。