10437


xmlとxslを使ってxmlのデータを五十音順で表示する場合どうすればよいでしょうか．  
xmlファイルの要素に五十音のにするためのコードを付け加えようと考えているのですがわかりません.  
以下コードです.

[code]

    <?xml version="1.0" encoding="UTF-8"?>
    <?xml-stylesheet type="text/xsl" href="sample4.xsl"?>
    <list>
      <chara category="鳥">
          <name>からす</name>
      </item>
      <chara category="虫">
          <name>あり</name>
      </item>
    </list>
    
[/code]

[code]

    <?xml version="1.0" encoding="UTF-8" ?>
    <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
    <xsl:output method="html" encoding="UTF-8" />
    <xsl:template match="list">
    <html>
    <body>
        <table border="1">
        <tr>
            <th>名前</th>
        </tr>
        <xsl:for-each select="chara">
        <xsl:sort select="chara" data-type="text" order="ascending" />
        <tr>
            <td><xsl:value-of select="name" /></td>
        </tr>
        </table>
    </body>
    </html>
    
[/code]


CC BY-SA 3.0
2015-05-19T10:15:29.950
10372
2015-05-20T23:26:31.123
2015-05-19T10:43:00.007
49
9505
question
xml xsl
xmlとxslを使ってxmlのデータを五十音順で表示したい


質問のxmlとxslには問題点があります。以下の原則を意識して見直してみてください。

xmlは原則として<開始タグ>を開始タグと同名の</終了タグ>で閉じる必要があります。  
末尾に"/"のある<空要素タグ/>は閉じる必要がありませんが、開始タグと混同しないよう注意が必要です。

この原則をふまえて質問にあるxmlを見直すと、<chara>が</chara>で閉じられていないことが分かります。  
xslも同様に以下のタグが閉じられていません。

  * <xsl:stylesheet>
  * <xsl:template>
  * <xsl:for-each>

</item>を</chara>に直したxmlの例は以下のようになります。

[code]

    <?xml version="1.0" encoding="UTF-8"?>
    <?xml-stylesheet type="text/xsl" href="sample4.xsl"?>
    <list>
      <chara category="鳥">
          <name>からす</name>
          <name>いぬ</name>
          <name>ごりら</name>
      </chara>
      <chara category="虫">
          <name>あり</name>
          <name>きりぎりす</name>
      </chara>
    </list>
    
[/code]

全カテゴリーをまとめてソートしたい場合は、以下を参考にsample4.xslを直してみてください。

[code]

    <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
        <xsl:output method="html" encoding="UTF-8" />
            <xsl:template match="list" >
            <html>
                <body>
                    <table border="1">
                        <tr>
                            <th>種類</th>
                            <th>名前</th>
                        </tr>
                        <xsl:for-each select="chara/name">
                            <xsl:sort select="." data-type="text" order="ascending" />
                            <tr>
                                <td><xsl:value-of select="../@category" /></td>
                                <td><xsl:value-of select="." /></td>
                            </tr>
                        </xsl:for-each>
                    </table>
                </body>
            </html>
        </xsl:template>
    </xsl:stylesheet>
    
[/code]

カテゴリーごとにソートしたい場合は、以下を参考にsample4.xslを直してみてください。

[code]

    <?xml version="1.0" encoding="UTF-8" ?>
    <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
    <xsl:output method="html" encoding="UTF-8" />
    <xsl:template match="list" >
    <html>
    <body>
        <ul>
        <xsl:for-each select="chara">
            <li><xsl:value-of select="./@category" /></li>
            <table border="1">
                <tr>
                    <th>名前</th>
                </tr>
                <xsl:for-each select="name">
                    <xsl:sort select="." data-type="text" order="ascending" />
                    <tr>
                        <td><xsl:value-of select="." /></td>
                    </tr>
                </xsl:for-each>
            </table>
        </xsl:for-each>
        </ul>
    </body>
    </html>
    </xsl:template>
    </xsl:stylesheet>
    
[/code]


CC BY-SA 3.0
2015-05-20T23:26:31.123
10437
2015-05-20T23:26:31.123
9820
10372
answer