XSLTを使用して、XMLファイルからアルファベット順にユーザーを並べ替えようとしています。ここでXSLT - forループでアルファベット順に並べ替え
は、XMLサンプル
<ROOT>
<ROW>
<FULLNAME>Adam Low</FULLNAME>
<GROUPS>
<DEPARTMENT>Test 1</DEPARTMENT>
<DEPARTMENT>Test 2</DEPARTMENT>
</GROUPS>
</ROW>
<ROW>
<FULLNAME>Julie Nelson</FULLNAME>
<GROUPS>
<DEPARTMENT>Test 1</DEPARTMENT>
<DEPARTMENT>Test 2</DEPARTMENT>
</GROUPS>
</ROW>
<ROW>
<FULLNAME>Colin Low</FULLNAME>
<GROUPS>
<DEPARTMENT>Test 1</DEPARTMENT>
</GROUPS>
</ROW>
<ROW>
<FULLNAME>Bobby Low</FULLNAME>
<GROUPS>
<DEPARTMENT>Test 1</DEPARTMENT>
</GROUPS>
</ROW>
</ROOT>
そして、ここでは、私はXSLTは私がROOT
内のすべてのROW
と内のすべてのDEPARTMENT
をループしてる要するに
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="html" />
<xsl:template match="ROOT">
<table>
<tbody>
<tr>
<td>
<strong>Users</strong>
</td>
</tr>
<tr>
<td>
<xsl:for-each select="ROW/GROUPS">
<xsl:if test="DEPARTMENT = 'Test 1'">
<xsl:sort select="../FULLNAME" />
<xsl:value-of select="../FULLNAME" />
<br />
</xsl:if>
</xsl:for-each>
</td>
</tr>
</tbody>
</table>
</xsl:template>
</xsl:stylesheet>
になりますどのように考えるかでありますGROUPS
ノードを細かい 'Test 1'にして、FULLNAME
ノードの値をレベルアップして、それを<TD>
に書き込みます。すべての値をアルファベット順に並べ替えたい<TD>
に入れてください。現在私は<xsl:sort select="../FULLNAME" />
が働いていないところです。あなたは述語
<xsl:for-each select="ROW/GROUPS[DEPARTMENT = 'Test 1']">
<xsl:sort select="../FULLNAME" />
状態を表現することができ
"動作していません"と言わないでください。失敗する方法を教えてください。 –
@MichaelKay こんにちはマイケルは、執筆の時点で、プロセッサーが投げていたエラーメッセージを理解できませんでした。私は質問を掲示する前にそれらを研究しようとした、私はまた短い時間でした。上記のコードを生成し エラーがあった: 「SaxonCE.StandardErrorListener 11:29:25.549 SEVERE:スタイルシート/ XSL:/ XSLでエラーテンプレート/テーブル/ TBODY/TR [2]/TD/XSL:のために-each/xsl:if/xsl:sort in http://fiddle.frameless.io/ XTSE0010:xsl:if要素にxsl:sort要素を含めることはできません。 " 私は今メッセージを理解しています。当時、XSLの新機能ではありませんでした。 –
これはよくある問題です。人々はエラーメッセージを理解していないので、誰もそれを理解しないと想像するので、投稿しません。エラーメッセージには、何が間違っているのかが書かれています.xsl:sortは間違っています。しかし、それはまた2つの異なるクライアントサイドのXSLTプロセッサー(Saxon-CEとFrameless)を指し、どちらも積極的に維持されていません。あなたは良い開発/テスト環境(oXygenやStylus Studio)を使用して、より良い診断を提供します。 –