著者の名前を処理し、引用のAPAバージョンを作成するXSLTスタイルシートを作成しようとしています。著者の名前に関するAPA引用の形式:名前が引用の最初の要素である場合は、名前が姓、次にイニシャルが表示されます。名前は、最後の作成者の前にコンマとアンパサンド(&)で区切ります。この投稿では、Dimitre Novatchevのソリューションに従いました。XSLTを使用して、文字列/サブ文字列の各インスタンスの後に選択しましたが、希望する結果が得られませんでした。
入力:
<names>
<author>Lio-Po, Gilda D.</author>
<author>Primavera, Jurgenne H.</author>
<author>Cuvin-Aralar, Ma. Lourdes A.</author>
<author>Cruz, E.R.</author>
<author>Catacutan, M.R.</author>
<author>Agbayani, R.F.</author>
</names>
必要な出力は次のとおりです。Lio-Po、GD、Primavera、JH、Cuvin-Aralar、MLA、Cruz、ER、Catacutan、MR、およびAgbayani、RF
著者が2人だけのレコードの場合:
<names>
<author>Lio-Po, Gilda D.</author>
<author>Primavera, Jurgenne H.</author>
</names>
必要な出力は次のようになります:Lio-Po、GD、およびPrimavera、JH
前もって感謝します。以下は、Dimitreから取得したいくつかのコードを含む私のコードです。
<xsl:strip-space elements="*"/>
<xsl:template match="/">
<xsl:for-each select="/names/author">
<xsl:choose>
<xsl:when test="count(following-sibling::text()) = 1">
<xsl:text>& </xsl:text>
<xsl:apply-templates/>
</xsl:when>
<xsl:when test="count(following-sibling::text()) != 0">
<xsl:apply-templates/>
<xsl:text>, </xsl:text>
</xsl:when>
</xsl:choose>
</xsl:for-each>
</xsl:template>
<xsl:template match="text()">
<xsl:value-of select="substring-before(., ',')"/>
<xsl:call-template name="replaceTokenDelims">
<xsl:with-param name="pStr" select="concat(normalize-space(substring-after(., ',')), ' ')"/>
<xsl:with-param name="pToken" select="' '"/>
<xsl:with-param name="pReplacement" select="', '"/>
</xsl:call-template>
</xsl:template>
<xsl:template name="replaceTokenDelims">
<xsl:param name="pStr"/>
<xsl:param name="pToken"/>
<xsl:param name="pReplacement"/>
<xsl:if test="$pStr">
<xsl:value-of select="$pReplacement"/>
<xsl:value-of select="substring(substring-before($pStr, $pToken),1,1)"/>
<xsl:call-template name="replaceTokenDelims">
<xsl:with-param name="pStr" select="substring-after($pStr, $pToken)"/>
<xsl:with-param name="pToken" select="$pToken"/>
<xsl:with-param name="pReplacement" select="$pReplacement"/>
</xsl:call-template>
</xsl:if>
</xsl:template>
上記のコードを実行すると、出力が得られます:Lio-Po、G、D、Primavera、J、H、Cuvin-Aralar、M、L、A、Cruz、E、Catacutan、M、およびAgbayani、R