2

Html として解析される CDATA 内のデータ。

<?xml version="1.0" encoding="utf-8" ?>
<test>
  <test1>
    <![CDATA[ &lt;B&gt; Test Data1 &lt;/B&gt; ]]>
  </test1>

  <test2>
    <![CDATA[ &lt;B&gt; Test Data2 &lt;/B&gt; ]]>
  </test2>

  <test3>
    <![CDATA[ &lt;B&gt; Test Data3 &lt;/B&gt; ]]>
  </test3>
 </test>

上記の入力 xml から、出力を html として解析する必要があります。

しかし、私は出力を次のように取得しています

<B>Test Data1</B>
<B>Test Data2</B>
<B>Test Data3</B>

しかし、実際の出力では、テキストを太字にする必要があります。

**Test Data1
Test Data2
Test Data3**

入力は外部システムからのものです。CDATA 内のテキストを変更できませんでした

4

2 に答える 2

1

testXHTML としての解析は、拡張関数 (または XSLT 2.0 と XSLT 2.0 で記述された HTML パーサー) を使用してのみ可能ですが、HTML 出力を作成し、要素の内容を HTML として出力したい場合は、次のように実行できます。

<xsl:template match="test/*[starts-with(local-name(), 'test')]">
  <xsl:value-of select="." disable-output-escaping="yes"/>
</xsl:template>

ただし、これdisable-output-escapingはオプションのシリアル化機能であり、すべてのユース ケースですべての XSLT プロセッサでサポートされているわけではないことに注意してください。たとえば、Mozilla ブラウザのクライアント側 XSLT ではサポートされていません。

于 2013-04-18T15:52:44.303 に答える
0

XSLT 1.0 にとどまる必要がある場合は、2 つの変換パスを実行する必要があります。

  1. 最初にxmlをコピーしますが、disable-output-escaping="yes"でコンテンツを生成してCDTAを削除します(@Martin Honnenからの回答を参照)

  2. 2 番目のパスでは、html 部分にアクセスできます。

ただし、これは、適切にフォーマットされた xml (xhtml) の役割に html 部分が従う場合にのみ可能です。おそらく xsltproc のような入力スイッチではない場合、html での作業に役立つ場合があります。

 --html: the input document is(are) an HTML file(s)

関連項目:コンテンツが CDATA 内にある xml 要素を変換する

于 2013-04-19T05:38:09.340 に答える