2

CDATA 中的数据将被解析为 Html。

<?xml version="1.0" encoding="utf-8" ?>
<test>
  <test1>
    <![CDATA[ &lt;B&gt; Test Data1 &lt;/B&gt; ]]>
  </test1>

  <test2>
    <![CDATA[ &lt;B&gt; Test Data2 &lt;/B&gt; ]]>
  </test2>

  <test3>
    <![CDATA[ &lt;B&gt; Test Data3 &lt;/B&gt; ]]>
  </test3>
 </test>

从上面的输入 xml 我需要将输出解析为 html。

但我得到的输出为

<B>Test Data1</B>
<B>Test Data2</B>
<B>Test Data3</B>

但实际输出我需要文本以粗体显示。

**Test Data1
Test Data2
Test Data3**

输入来自外部系统。我们无法更改 CDATA 中的文本

4

2 回答 2

1

解析为 HTML 只能使用扩展函数(或使用 XSLT 2.0 和用 XSLT 2.0 编写的 HTML 解析器),但如果您想创建 HTML 输出并将testX元素的内容输出为 HTML,那么您可以使用例如

<xsl:template match="test/*[starts-with(local-name(), 'test')]">
  <xsl:value-of select="." disable-output-escaping="yes"/>
</xsl:template>

但是请注意,这disable-output-escaping是一个可选的序列化功能,并非所有用例中的所有 XSLT 处理器都支持。例如,Mozilla 浏览器中的客户端 XSLT 不受支持。

于 2013-04-18T15:52:44.303 回答
0

如果您必须继续使用 XSLT 1.0,则必须运行两次转换过程。

  1. 第一个复制您的 xml 但通过使用 disable-output-escaping="yes" 生成内容来删除 CDTA (参见@Martin Honnen 的回答)

  2. 在第二个路径中,您可以访问 html 部分。

但这只有在 html 部分遵循格式良好的 xml (xhtml) 的角色时才有可能。如果不是 xsltproc 中的输入开关可能有助于使用 html,例如:

 --html: the input document is(are) an HTML file(s)

另请参阅:转换内容在 CDATA 内的 xml 元素

于 2013-04-19T05:38:09.340 回答