在 XSLT 1.0 中处理0x19



当输入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>&#x19;</Value>

这是一个无效的 XML。我怎样才能做对?

你是对的

 <Value>&#x19;</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。

相关内容

  • 没有找到相关文章

最新更新