5

区切られた文字列 (以下の例ではスペースで区切られています) をトークン化し、並べ替えてから結合する必要があり、これらすべてを XSLT 1.0 を使用して行う必要があります。どうすればいいですか?どうにかして使用する必要があることはわかってxsl:sortいますが、これまでに試したことはすべて、何らかのエラーを引き起こしました。

たとえば、この投稿の下部にあるコードを実行すると、次のようになります。

ストロベリー ブルーベリー オレンジ ラズベリー ライム レモン

代わりにこれを入手したい場合はどうすればよいですか?:

ブルーベリー レモン ライム オレンジ ラズベリー ストロベリー

XSLT 1.0 を使用していることに注意してください。

これは、 Jeni Tennisonによるコードに基づいたコードです。

<?xml version="1.0"?>
<?xml-stylesheet type="text/xsl" href="tokenize1.xsl"?>
<xsl:stylesheet version="1.0"
                xmlns:xsl="http://www.w3.org/1999/XSL/Transform">

<xsl:template match="/">
  <xsl:call-template name="tokenize">
    <xsl:with-param name="string" select="'strawberry blueberry orange raspberry lime lemon'" />
  </xsl:call-template>
</xsl:template>

<xsl:template name="tokenize">
  <xsl:param name="string" />
  <xsl:param name="delimiter" select="' '" />
  <xsl:choose>
    <xsl:when test="$delimiter and contains($string, $delimiter)">
      <token>
        <xsl:value-of select="substring-before($string, $delimiter)" />
      </token>
      <xsl:text> </xsl:text>
      <xsl:call-template name="tokenize">
        <xsl:with-param name="string" 
                        select="substring-after($string, $delimiter)" />
        <xsl:with-param name="delimiter" select="$delimiter" />
      </xsl:call-template>
    </xsl:when>
    <xsl:otherwise>
      <token><xsl:value-of select="$string" /></token>
      <xsl:text> </xsl:text>
    </xsl:otherwise>
  </xsl:choose>
</xsl:template>

</xsl:stylesheet>
4

2 に答える 2

0

プロセッサが EXSLT をサポートしている場合は、str:tokenizeを使用することをお勧めします

並べ替えに xsl:sort を使用しないのはなぜですか?

<xsl:template match="/">
  <xsl:variable name="tokens">
    <xsl:call-template name="tokenize">
      <xsl:with-param name="string" select="'strawberry blueberry orange raspberry lime lemon'" />
    </xsl:call-template>
  </xsl:variable>

  <xsl:for-each select="$tokens">
    <xsl:sort select="text()" />
    <xsl:value-of select="." />
    <xsl:if test="not(last())">
      <xsl:text> </xsl:text>
    </xsl:if>
  </xsl:for-each>
</xsl:template>

反復には exsl:node-set do が必要になる場合があることに注意してください。

于 2009-06-19T16:58:02.350 に答える