当输入xml包含字符0x19时,我遇到了问题。我创建了一个演示 xslt 来重现该问题。我的演示 xslt 看起来像这样:
<?xml version="1.0" encoding="utf-8"?>
<xsl:transform version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:msxsl="urn:schemas-microsoft-com:xslt" exclude-result-prefixes="msxsl">
<xsl:output method="xml" indent="yes"/>
<xsl:param name="param1"/>
<xsl:template match="/">
<Value>
<xsl:value-of select="$param1"/>
</Value>
</xsl:template>
</xsl:transform>
我正在传递字符0x19作为param1
.将生成以下输出。
<Value></Value>
这是一个无效的 XML。我怎样才能做对?
你是对的
<Value></Value>
格式不正确的 XML 1.0 - XML 1.0 不允许在 U+0020 以下的任何控制字符,但 U+0009(制表符)、U+000A (LF) 和 U+000D (CR) 除外,即使表示为数字字符引用也是如此,因此根本不可能在 XML 1.0 文档中包含该字符。 处理器生成该输出是错误的,它应该引发错误以抱怨您试图在输出中插入非法字符。
但是,它是格式良好的 XML 1.1,它允许控制字符作为&#
引用,但不能作为文本。 如果您的处理器支持此功能(并且将接收输出的 donwnstream 组件也支持它),那么在xsl:output
指令中添加version="1.1"
可能就足够
<xsl:output method="xml" indent="yes" version="1.1"/>
告诉它输出 XML 1.1 而不是 XML 1.0。