2

ここに私のXMLがあります:

<p>
  <t>bla bla bla <XX>bla<REG /> bla</XX> bla</t>
  <t>bli bli bli <XX>bli bli</XX> bli</t>
  <t>blo <REG /> blo blo <XX>blo blo <REG /></XX></t>
</p>

XX に含まれるテキストを抽出し、同時に REG をスラッシュに置き換えたい (bla / bla にするため - 最初の行の例)。

一度に両方を実行できますが、両方のルールをタグに適用できませんでした。XSLT 1.0 で可能ですか?

これが私のXSLTルールです(非常に基本的です):

<xsl:template match="REG">
  <xsl:text> / </xsl:text>
</xsl:template>

<xsl:template match="XX">
  <xsl:value-of select="normalize-space(.)"/>
</xsl:template>

substring-before と substring-after を使用して文字列 (スラッシュ) に置き換えようとしましたが、タグでは機能しません。

前もって感謝します。

4

1 に答える 1

1

問題は、 XXに一致するテンプレートにあります。たとえば、ドキュメント内のXXノードの特定の例を調べます。

<XX>bla<REG /> bla</XX>

次に、このXX要素には実際には 3 つの子ノードがあります。テキスト ノード「何とか」、REG要素、および別のテキスト ノード「何とか」。したがって、単一のコンテンツを持つだけのXXと考える必要があります。その上でxsl:value-ofを実行すると、その中のすべての子孫テキスト ノードが単純に連結されます。

必要なことは、XXに一致する現在のテンプレートを 2 つのテンプレートに置き換えることです。

最初の要素は現在のようにXXに一致しますが、処理をその子要素に渡すだけです (つまり、XX は出力されません)。2 番目のテンプレートは、 XX要素の子テキスト ノードに明確に一致し、そこでテキストを出力できます。

代わりにこれら 2 つのテンプレートを試してください

<xsl:template match="XX">
  <xsl:apply-templates />
</xsl:template>

<xsl:template match="XX/text()">
  <xsl:value-of select="normalize-space(.)"/>
</xsl:template>
于 2013-09-30T21:18:33.320 に答える