これにより、どのように解決できるかについてのアイデアが得られます。
<?xml version="1.0"?>
<xsl:template match="/">
<xsl:apply-templates/>
</xsl:template>
<!-- Only our text element requires special handling here....-->
<xsl:template match="text">
<xsl:copy>
<xsl:choose>
<xsl:when test="matches(.,'Paragraph\s+\d*')">
<!-- Save original text value here -->
<xsl:variable name="temp" select="."/>
<!-- Save the value of <italic>x</italic> child element -->
<xsl:variable name="italic_val" select="italic/text()"/>
<xsl:analyze-string select="." regex="(Paragraph\s+\d*)">
<xsl:matching-substring>
<xsl:element name="a">
<xsl:attribute name="href">
<xsl:value-of select="concat(replace(regex-group(1),'\s',''),'(',$italic_val,')')"/>
</xsl:attribute>
<xsl:value-of select="$temp"/>
</xsl:element>
</xsl:matching-substring>
</xsl:analyze-string>
</xsl:when>
<xsl:otherwise>DOESNT MATCH</xsl:otherwise>
</xsl:choose>
</xsl:copy>
</xsl:template>
<xsl:template match="@*|node()">
<xsl:copy>
<xsl:apply-templates select="@*|node()"/>
</xsl:copy>
</xsl:template>
<text>
基本的に、XSLT ID テンプレートを使用して元のドキュメントをコピーし、要素を処理するテンプレートを定義します。そこで、その Text() コンテンツを分析し、適切な Regex: Paragraph を分析します。アンカーサブ構造を生成することがわかった場合。そのために、いくつかの一時変数を使用します。
ここに私の出力ファイル:
<xml>
<para>
<number>1</number>
<text><a href="Paragraph1(A)"> Paragraph 1(A) is this para.</a></text>
</para>
</xml>
私が得ているものではなく、まだ段落 1( <italic>A</italic>
) がありません: 段落 1(A) ですが、それは微調整にすぎません...
このリンクを見てくださいXSLT の正規表現を理解するのに役立つかもしれません
XSLT 2.0 を使用していることに注意してください