2016-06-08 145 views
2

这是一个常见问题,但我找不到满足我的答案。 我正在使用一种专有工具(SIMATIC IT MES系统),当我用属性值中的'<'符号向其XML解析工具提供XML时,它会扼杀它。 据我所知,字符串文字中的属性值应该被视为CDATA,因此XML应该是有效的,这就是大多数在线验证器所说的。 这是正确的吗?解析器是否有错或者我错过了什么?是否有一个解决方案不涉及手动替换与其实体等效的冒犯角色?我排除XML文本以供参考:XML属性值中的控制字符

<PARAM ATT1='DESPIECE' 
     ATT2='BU_O_DES' 
     ATT3= '1' 
     ATT3= '0' 
     ATT4='1.0' 
     ATT4= 'BU.SD01.L02' 
     ATT5= 'BU.SD01.L02' 
     ATT6='1ESP1586CV00' 
     ATT7='CLASS FIFO AÑOJO < 350' 
     ATT8='08/06/2016' 
     ATT9='115001' 
     MARCA_EMPRESA='false' 
     VARIANTE='' 
     ID_CLASS_ESTABILIZACION='91' 
/> 

违规字符在ATT7中。

谢谢。

+1

名称“CDATA”在XML中有两个完全不同的含义,仅与SGML中的一个共同遗产相关。出现在元素中的“CDATA节”允许您在不转义的情况下使用特殊字符,例如'<'和'&'。在DTD(显式或隐式)中用类型CDATA声明的属性不会。 –

+0

谢谢!我想这让我感到困惑。 –

回答

4

不幸的是,您没有任何其他解决方案,只能用字符实体&lt;“逃离”<

如果你看一下XML规范,§2.4 Character data and markup,你会看到,定义如下:

字符数据

[14] CharData :: = [^ < &] * - ([^ < &] * ']]>'[^ < &] *)

将不久,就意味着<&必须始终以XML格式转义。

+0

非常感谢 –