如何使用XSLT从CDATA中提取文本?

时间:2014-02-08 04:28:31

标签: xml xslt utf-8 cdata

我的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的内容?

2 个答案:

答案 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"
/>