我的xmls中有一些xml不友好的字符。一些xml解析器可以调整为与这些字符友好。但我决定用CDATA包围它们以避免XSL处理器错误。但我必须以某种方式修改xsl。这就是我现在所拥有的:
<subject>
<![CDATA[svn commit: r41657 - head/en_US.ISO8859-1/books/handbook/basics]]>
</subject>
我有一个变量
<xsl:variable name="message_subject">
<xsl:text> “</xsl:text>
<xsl:value-of select="/browser/message/subject"/>
<xsl:text>”</xsl:text>
</xsl:variable>
以这种方式使用:
<h1>
<xsl:copy-of select="$message_subject"/>
</h1>
并给我
<h1>
“<![CDATA[svn commit: r41657 - head/en_US.ISO8859-1/books/handbook/basics]]>”
</h1>
问题是CDATA与所需的字符串混合在一起。我使用net.sf.saxon.TransformerFactoryImpl。如何使xslt只接受CDATA的内容?
答案 0 :(得分:1)
(a)您的XML中没有任何内容需要CDATA。 XML中唯一需要转义的字符是&
和<
,这些字符都不会显示在您的数据中。
(b)XSLT在剥离CDATA标签后看到数据。在您的示例中,它将看到完全相同的内容,就像CDATA标记不存在一样。
您显示的输出非常奇怪,我不知道您是如何实现它的。我不知道为什么你选择使用这样一个旧版本的撒克逊人,但我怀疑这是解释。还有其他一些我们不知道的事情。
答案 1 :(得分:0)
如果我没有弄错读这个问题,试试这个:
<xsl:value-of
select="node where CDATA resides"
disable-output-escaping="yes|no"
/>