2011-09-24 62 views

回答

5

您不能使用字符'{'和'|'直接在ID屬性,因爲在XML specification它說

Values of type ID must match the Name production. A name must not appear more than once in an XML document as a value of this type; i.e., ID values must uniquely identify the elements which bear them.

名稱生產here。如果展開的語法規則,你看,允許在名稱中的字符被這些作品給出:

[4] NameStartChar ::= ":" | [A-Z] | "_" | [a-z] | [#xC0-#xD6] | [#xD8-#xF6] | [#xF8-#x2FF] | [#x370-#x37D] | [#x37F-#x1FFF] | [#x200C-#x200D] | [#x2070-#x218F] | [#x2C00-#x2FEF] | [#x3001-#xD7FF] | [#xF900-#xFDCF] | [#xFDF0-#xFFFD] | [#x10000-#xEFFFF]

[4a] NameChar ::= NameStartChar | "-" | "." | [0-9] | #xB7 | [#x0300-#x036F] | [#x203F-#x2040]

不幸的是,左大括號和管道都是不允許的。這些字符的碼點分別是#7B和#7C;不在公認的字符範圍內。

TL; DR:ID屬性的合法字符屬於XML規範,您的兩個字符不合法。

附錄

下面是一些例子。下列文件通過驗證的XHTML的W3C驗證網站:

<?xml version="1.0"?> 
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" 
    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 
<html xmlns="http://www.w3.org/1999/xhtml" lang="en-US" xml:lang="en-US"> 
    <head> 
    <title>A title</title> 
    </head> 
    <body id="anid"> 
    </body> 
</html> 

但下面不會

<?xml version="1.0"?> 
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" 
    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 
<html xmlns="http://www.w3.org/1999/xhtml" lang="en-US" xml:lang="en-US"> 
    <head> 
    <title>A title</title> 
    </head> 
    <body id="ani{d"> 
    </body> 
</html> 

我們得到的錯誤:

Line 8, Column 16: character "{" is not allowed in the value of attribute "id" 

現在是相當有趣的是,如果你真的想在id名字左邊的大括號中,你可以試試這個:

<?xml version="1.0"?> 
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" 
    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 
<html xmlns="http://www.w3.org/1999/xhtml" lang="en-US" xml:lang="en-US"> 
    <head> 
    <title>A title</title> 
    </head> 
    <body id="ani&#x7B;d"> 
    </body> 
</html> 

但你得到相同錯誤!你可能想試試這個;驗證器顯示符號散列x七b分號的行,但它認爲在那裏有左大括號。

底線是,你只需要不能的ids字符不是由XML規範允許的那些字符。

+0

謝謝!所以我必須重命名屬性。 – stofl

+0

是的,我怕你必須重命名它們。我在我的答案中添加了一些示例驗證,表明您甚至無法嘗試使用字符實體來擊敗驗證程序。規格是規格。 :) –

+0

非常感謝。 – stofl