1

次の XML があります。

<GSP>
  <RES>
     <R N="1">
        <MT N="NonEnglishAbstract" V="[DE]Deutsch Abstract text[FR]French Abstract text"/>
     </R>
  </RES>
</GSP>

@Vの場合、属性の値が必要@NですNonEnglishAbstract。この値は、出力例のように、[DE]、[FR]、または基本的に角括弧内の 2 つの大文字のすべてのパターンを HTML コンテンツに置き換えた後の値である必要があります。

XSLT 2.0 ソリューションを使用できます。

tokenize() と一緒に正規表現パターンを使用して結果を得ることができると思いますが、すべてをまとめる専門知識はありません。

出力例:

<p class='DE'>Deutsch Abstract text </p>
<p class='FR'>French Abstract text </p>
4

1 に答える 1

1

を使用することをお勧めしxsl:analyze-stringます。

例:

XML 入力

<GSP>
    <RES>
        <R N="1">
            <MT N="NonEnglishAbstract" V="[DE]Deutsch Abstract text[FR]French Abstract text"/>
        </R>
    </RES>
</GSP>

XSLT 2.0

<xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
    <xsl:output indent="yes"/>
    <xsl:strip-space elements="*"/>

    <xsl:template match="MT[@N='NonEnglishAbstract']">
        <xsl:analyze-string select="@V" regex="\[([^\[\]]+)\]([^\[]+)">
            <xsl:matching-substring>
                <p class="{regex-group(1)}">
                    <xsl:value-of select="regex-group(2)"/>
                </p>
            </xsl:matching-substring>
        </xsl:analyze-string>
    </xsl:template>

</xsl:stylesheet>

出力

<p class="DE">Deutsch Abstract text</p>
<p class="FR">French Abstract text</p>

\[([A-Z]{{2}})\]([^\[]+)一致をより具体的にしたい場合は、正規表現をに変更できます。

于 2013-09-17T04:55:04.550 に答える