1

最近、for each ループを適用し、「and」キーワードを使用して文字列を連結する必要があるケースに遭遇しました。以下は、私の xml ドキュメントの一部です。

<?xml version="1.0" encoding="utf-8"?>
<case.ref.no.group>
    <case.ref.no>
        <prefix>Civil Appeal</prefix>
        <number>W-02-887</number>
        <year>2008</year>
    </case.ref.no>
    <case.ref.no>
        <prefix>Civil Appeal</prefix>
        <number>W-02-888</number>
        <year>2008</year>
    </case.ref.no>
</case.ref.no.group>

そして、以下のxsltを試しました。

<xsl:template match="case.ref.no.group">
    <xsl:variable name="pre">
      <section class="sect2">
      <xsl:text disable-output-escaping="yes">Court of Appeal</xsl:text>
      </section>
    </xsl:variable>
    <xsl:variable name="tex">
      <xsl:value-of select="./case.ref.no/prefix"/>
    </xsl:variable>
    <xsl:variable name="iter">

        <xsl:value-of select="./case.ref.no/number"/>
        <xsl:if test="following::case.ref.no/number">;</xsl:if>

    </xsl:variable>
    <xsl:variable name="year">
      <xsl:value-of select="./case.ref.no/year"/>
    </xsl:variable>
    <div class="para">
      <xsl:value-of select="concat($pre,' – ',$tex,' Nos. ',$iter,'-',$year)"/>
    </div>
  </xsl:template>

実行しようとすると、以下の出力が表示されます。

控訴裁判所 – 民事控訴番号 W-02-887 2008

しかし、私はそれが以下のようになりたいです。

控訴裁判所 – 民事控訴番号 W-02-887-2008 および W-02-888-2008

どうすればこれを達成できるか教えてください。私はxslt 1.0でこれをやっています。

ありがとう

4

1 に答える 1

0

あなたが何をしようとしているのか正確にはよくわかりません。あなたは言及for-eachしましたが、あなたのコードには存在しません、あなたは単語に言及しましたが、あなたandはそれを使用しません:-)

次のスタイルシートを使用する場合

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:fo="http://www.w3.org/1999/XSL/Format">
    <xsl:output method="xml" indent="yes"/>

    <xsl:template match="/">
        <output>
            <xsl:apply-templates select="case.ref.no.group" />
        </output>
    </xsl:template>

    <xsl:template match="case.ref.no.group">
        <section class="sect2">
            <xsl:text>Court of Appeal</xsl:text>
        </section>

        <xsl:text> - </xsl:text>
        <xsl:value-of select="case.ref.no[1]/prefix" />
        <xsl:text> Nos. </xsl:text> 

        <xsl:for-each select="case.ref.no">
            <xsl:value-of select="number" />
            <xsl:text>-</xsl:text>
            <xsl:value-of select="year" />
            <xsl:if test="not(position() = last())">
                <xsl:text> and </xsl:text>
            </xsl:if>
        </xsl:for-each>

    </xsl:template>
</xsl:stylesheet>

私はこの結果を得る

<?xml version="1.0" encoding="UTF-8"?>
<output xmlns:fo="http://www.w3.org/1999/XSL/Format"><section class="sect2">Court of Appeal</section> - Civil Appeal Nos. W-02-887-2008 and W-02-888-2008</output>

しかし、私が言ったように、あなたのニーズをよく理解しているかどうかはわかりません. たとえば、ある種のグループ化が必要ないかどうかはわかりません(プレフィックスは、<case.ref.no>1つの親の下で常に同じになり<case.ref.no.group>ますか?)など。

于 2013-07-03T13:33:01.540 に答える