0

HTML のタグを含むソース XML があります。不器用な CSV ファイルから作成されました。

目標は、以下を使用してソース XML を 2 番目の XML に変換することです。

<Description type="long" format="html">
  <![CDATA[             
    <xsl:value-of select="HTML_Descr"/>
 ]]>
</Description>

残念ながら、その XSL は次のように変換されます

<Description type="long" format="html">
  <![CDATA[             
    &lt;xsl:value-of select="HTML_Descr"/&gt;
 ]]>
</Description>

リフレクションでは出力は理にかなっていますが、目標は単純に HTML を CDATA 内にラップすることです。

注: - CDATA をソース XML に入れることはできません。- より正確には、ソース XML ファイルは数百の XML ファイルです - プロセッサは XSL 1.0 を使用する xsltproc です

ごめん。見つかった多くのヘルプは、単純に HTML 形式を維持するものでした。前もって感謝します。

補遺

完全なプロセスは、CSV -> XML (CSV ヘッダーを使用した一時的な翻訳) -> XML (良い) -> (X)HTML です。

また、適切な XML はリポジトリに保持され、継続的に更新されるため、一時 XML から HTML を変換することはできません。

4

2 に答える 2

4

実はこれが最も近い質問です。Convert 'embedded' XML doc into CDATA output in XSLT (1.0)

そして答えてください:

次の機能は必要に応じて機能しますが、これが唯一かつ最良の解決策ではない場合があります。

<xsl:template match="document">
  <document>
    <xsl:text disable-output-escaping="yes">&lt;![CDATA[</xsl:text>
    <xsl:copy-of select="./html"/>
    <xsl:text disable-output-escaping="yes">]]&gt;</xsl:text>
  </document>
</xsl:template>
于 2013-03-18T07:26:10.097 に答える
0

あなたはおそらくこれが欲しいでしょう:

<xsl:value-of select="HTML_Descr" disable-output-escaping="yes"/>

ただし、CDATA内のHTMLフラグメントが適切なXML(たとえば、XHTML)でない場合、これによりXMLファイルが無効になる可能性があることに注意してください。注意して使用してください-それは強いコードの臭いです!

より良い方法は、CDATAリテラルテキストブロックを使用する代わりに、XMLファイルの独自の名前空間に実際のXHTMLとしてHTMLを含めることです。これにより、disable-output-escaping「ハック」を使用する代わりに、XSLTプロセッサにノードをコピーさせることができます。

于 2013-03-17T21:34:34.803 に答える