1

子要素を文字列に変換して失うことなく、ノードの特定の部分をラップする方法はありますか?

それが私が持っているものです:

<root>
    <caption>Figure 3.1 Description of an Image, sometimes with <inline>Bold</inline> or <inline>Italic</inline> emphases.</caption>
</root>

...そしてそれが私が必要とするものです:

<root>
    <caption><inline>Figure 3.1</inline>Description of an Image, sometimes with <inline>Bold</inline> or <inline>Italic</inline> emphases.</caption>
</root>

正規表現を使用して^Figure\s[0-9]+.[0-9]+さまざまなバリエーションをキャッチすることを検討し (たとえば、図 11.10)、問題を解決するために何時間も試みましたが、次の を削除せずには解決できませんでした<inline>...それは可能ですか?

XSLT 2.0 を使用しています。

ありがとうございました!

4

1 に答える 1

3

テキストノードのテンプレートを書く

<xsl:template match="caption/text()">
  <xsl:analyze-string select="." regex="^Figure\s[0-9]+\.[0-9]+">
    <xsl:matching-substring>
      <inline><xsl:value-of select="."/></inline>
    </xsl:matching-substring>
    <xsl:non-matching-substring>
      <xsl:value-of select="."/>
    </xsl:non-matching-substring>
  </xsl:analyze-string>
</xsl:template>

もちろん、恒等変換テンプレートを使用してスタイルシートを開始します。

<xsl:template match="@* | node()">
  <xsl:copy>
    <xsl:apply-templates select="@* | node()"/>
  </xsl:copy>
</xsl:template>
于 2013-10-31T14:22:51.757 に答える