情報を含むすべてのノードがCDATAにあるXMLファイルがあります。これらの情報は、次のようなHTMLタグでフォーマットされている可能性があります。
<EventList>
<Text><![CDATA[<p>Some text <i>is</i> formatted! This is a character entity '</p>]]></Text>
<ShortText><![CDATA[Some other is only plain]]></ShortText>
<!-- others more -->
</EventList>
これを(X)HTMLページのXSLTで変換したい:
<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns="http://www.w3.org/1999/xhtml">
<xsl:output
method="html"
doctype-public="-//W3C//DTD XHTML 1.0 Transitional//EN"
media-type="application/xhtml+xml"
encoding="utf-8"
omit-xml-declaration="yes"
indent="no"
/>
<xsl:template match="Text">
<h2><xsl:copy-of select="text()"/></h2>
</xsl:template>
<xsl:template match="ShortText">
<div><xsl:copy-of select="."/></div>
</xsl:template>
</xsl:stylesheet>
しかし、この変換を適用すると、奇妙な動作が発生します。XSLTに配置したHTMLタグは、ブラウザーから正しく解析および解釈されますが、CDATA内のタグから<
、>
および&
charが削除され、次の出力が生成されます。
<h2>pSome text iis/i formatted! This is a character entity #39;/p</h2>
<div>Some other is only plain</div>
最初は定義の問題のように見えました<xsl:output>
が、私はまだこれに固執しています。.
省略形のXPathと関数を使用しようとしましtext()
たが、出力は同じです。どんな提案でも大歓迎です!