2013-11-15 57 views
1

当输入xml包含字符0x19时,我遇到了一个问题。我创建了一个演示xslt来重现此问题。 我演示XSLT看起来是这样的:在XSLT 1.0中处理0x19

<?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。我怎样才能解决它?

+0

如果输入流包含字符0x19,则输入不是XML。 –

回答

1

你是正确

<Value>&#x19;</Value> 

不是良好的XML 1.0 - XML 1.0不允许低于ü任何控制字符+ 0020除了U + 0009(制表符),U + 000A(LF)和U + 000D(CR),甚至在表达为数字字符引用时也是如此,因此在XML 1.0文档中不可能包含该字符。处理器产生错误的输出,它应该提出一个错误,抱怨你试图在输出中插入一个非法字符。

但它格式良好的XML 1.1,它允许控制字符为&#引用,但不能作为文字。如果您的处理器支持此(和将要接收的输出支持它太donwnstream部件),那么它可能是足够的添加version="1.1"xsl:output指令

<xsl:output method="xml" indent="yes" version="1.1"/> 

到告诉它输出XML 1.1代替XML 1.0的。