XSLT文件:
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml" indent="yes" encoding="UTF-8"/>
<xsl:template match="line1">
<body><xsl:value-of select="line2[@NAME='data']"/></body>
</xsl:template>
</xsl:stylesheet>
XML文件:
<?xml version="1.0" encoding="UTF-8"?>
<line1>
<line2 name="data"><!CDATA[地址:北京经济技术开发区分新<span lang="ZH-CN" style="font-family:SimSun">号诺基亚大厦</span>]</line2>
</line1>
我在转换XML文件中的数据时遇到了问题。当我尝试生成输出XML时,错误:显示无效的XML字符。任何人都可以帮助我。
答案 0 :(得分:1)
1)XML实例中的CDATA部分不正确。它在CDATA
之前缺少一个左括号,一个右括号和一个关闭角括号。它应该具有以下形式:<![CDATA[ ... ]]>
。
以下是更正后的表格:
<?xml version="1.0" encoding="UTF-8"?>
<line1>
<line2 name="data"><![CDATA[地址:北京经济技术开发区分新<span lang="ZH-CN" style="font-family:SimSun">号诺基亚大厦</span>]]></line2>
</line1>
此外,由于您正在寻找name
(案例事项),因此您的XSLT将找不到NAME
属性。将其更改为:
<xsl:value-of select="line2[@name='data']"/>
这是使用Saxon-EE 9.5.1.3的结果:
<?xml version="1.0" encoding="UTF-8"?>
<body>地址:北京经济技术开发区分新<span lang="ZH-CN" style="font-family:SimSun">号诺基亚大厦</span></body>
2)如果您想保留结果中的CDATA
部分,请将cdata-section-elements="body"
添加到output
:
<xsl:output method="xml" indent="yes" encoding="UTF-8" cdata-section-elements="body"/>
你的结果将是:
<body><![CDATA[地址:北京经济技术开发区分新<span lang="ZH-CN" style="font-family:SimSun">号诺基亚大厦</span>]]></body>
3)但似乎您正在尝试构建XML并希望未转义<span>
元素。在这种情况下,您应该将disable-output-escaping="yes"
添加到xsl:value-of
:
<xsl:value-of disable-output-escaping="yes" select="line2[@name='data']"/>
(如果您添加了cdata-section-elements="body"
,请从output
移除),然后您的结果将是:
<body>地址:北京经济技术开发区分新<span lang="ZH-CN" style="font-family:SimSun">号诺基亚大厦</span></body>