【问题标题】:How to extract text from CDATA with XSLT?如何使用 XSLT 从 CDATA 中提取文本?
【发布时间】:2014-02-08 04:28:31
【问题描述】:

我的 xml 中有一些对 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 的内容?

【问题讨论】:

  • 我无法重现您的问题。我们能否看到更多您的样式表(输出类型是什么,如何使用变量)?您使用的是哪个处理器?
  • @michael.hor257k,感谢您的关注。我已经更新了问题描述,所以我希望你能重现它。我使用撒克逊语。

标签: xml xslt utf-8 cdata


【解决方案1】:

(a) 您的 XML 中没有任何内容需要 CDATA。 XML 中唯一需要转义的字符是 &amp;&lt;,而这两个字符都不会出现在您的数据中。

(b) XSLT 看到 CDATA 标记被剥离后的数据。在您的示例中,它将看到与不存在 CDATA 标记完全相同的内容。

您显示的输出很奇怪,我不知道您是如何实现的。我不知道您为什么选择使用这么旧版本的撒克逊语,但我怀疑这就是解释。还有一些我们不知道的事情正在发生。

【讨论】:

    【解决方案2】:

    如果我没记错问题,试试这个:

    <xsl:value-of
        select="node where CDATA resides"
        disable-output-escaping="yes|no"
    />
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-03-11
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多