2017-10-20 54 views
0
<?xml version="1.0" encoding="utf-8" standalone="yes"?> 
<programme> 
    <condition> if (a>b) and (c>d) echo "sorry"; </condition> 
</programme> 

結果是:成功爲什麼「<" , ">」,「和‘顯示在這個XML例子

文件檢查成功

,並沒有錯誤!但我讀了我可以’ t直接在xml中使用特殊字符,但我應該通過實體(例如:> ===>&gt; etc)

爲什麼不顯示錯誤?

但是當我嘗試(只是增加了兩個括號中)本實施例中顯示的錯誤

<?xml version="1.0" encoding="utf-8" standalone="yes"?> 
<programme> 
    <condition> if (a<b and b>d) </condition> 
</programme> 

錯誤: 'b' 爲一個意外標記。預期的標記是'='。 3號線, 30位

這是因爲我們打開一個標籤<b,所以他考慮和如不關閉,所以這就是爲什麼問題的存在沒有價值和標籤中的屬性?

如果是的話,我可以得出結論,如果我們不犯這個錯誤,我們可以正常使用特殊字符。

並且謝謝。

+0

你必須轉義字符。閱讀這個問題(https://stackoverflow.com/questions/1091945/what-c​​haracters-do-i-need-to-escape-in​​-xml-documents) –

回答

2

請參閱示例中的>字符(它通常是文本節點內的字符):它不能被視爲標記的結尾(因爲沒有相應的<符號)。這就是解析器處理它的原因。

這裏是the XML FAQ說一下:

除了無形的ASCII控制字符(那些你不能 型),所有其他角色都只是普通的文本。貨幣符號(€, £,$,ƒ,₨,Ƀ,和其他人),所有的標點(除了<&),以及 所有其他字母,符號和符號在任何語言或書面 系統是隻是文本(假設你有正確的字符 編碼)。


至於錯誤,在其文本仔細一看:

'b' is an unexpected token. The expected token is '='. Line 3, position 30. 

點,它已經不是第b - 但第二個。下面是<b and b>如何解析器處理一個可能的方式:

  • <b被視爲打開標籤
  • and被視爲屬性名稱

...現在解析器等待=令牌出現在某處,因爲正常的屬性語法是%ATTR_NAME% = %ATTR_VALUE%,允許使用空格作爲分隔符。但它取而代之的是b - 並且只是舉起手來。

+0

非常完整的答案,作爲一個有用的添加,過度使用實體可能會減慢文件,因爲我們可以使用CDATA部分。 –

+0

例如:! <?XML版本= 「1.0」 編碼= 「UTF-8」 獨立= 「是」> <![CDATA [如果((A b))的回聲 「小仔盂蘭盆」 ;]]>