2016-06-08 149 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

非常感謝 –