CDATA内的数据将被解析为Html。
<?xml version="1.0" encoding="utf-8" ?>
<test>
<test1>
<![CDATA[ <B> Test Data1 </B> ]]>
</test1>
<test2>
<![CDATA[ <B> Test Data2 </B> ]]>
</test2>
<test3>
<![CDATA[ <B> Test Data3 </B> ]]>
</test3>
</test>
从Above输入xml我需要将输出解析为html。
但我得到的输出为
<B>Test Data1</B>
<B>Test Data2</B>
<B>Test Data3</B>
但实际输出我需要文本以粗体显示。
**Test Data1
Test Data2
Test Data3**
输入来自外部系统。我们无法更改CDATA内的文本
答案 0 :(得分:1)
只能使用扩展函数(或使用XSLT 2.0和使用XSLT 2.0编写的HTML解析器)解析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时,它不受支持。
答案 1 :(得分:0)
如果您必须继续使用XSLT 1.0,则必须运行两次转换过程。
首先复制xml,但通过使用disable-output-escaping =&#34; yes&#34;生成内容来删除CDTA。 (见@Martin Honnen的回答)
在第二个路径中,您可以访问html部分。
但是,如果html部分遵循格式良好的xml(xhtml)的角色,这可能是唯一可能的。如果不是,xsltproc中的输入开关可能有助于使用html,例如:
--html: the input document is(are) an HTML file(s)