2011-08-28 59 views
1

我是新手,XML ......我剛開始學習XML ....我有以下幾點疑惑.. 以下是我的XML代碼問題與XML

<?xml version="1.0" encoding="ISO-8859-1"?> 
<!DOCTYPE book [ 
<!ELEMENT book (page)> 
<!ELEMENT page (heading,#PCDATA)> 

]> 
<note> 
<page> 
    hhh<heading>c</heading><heading>s</heading> 
</page> 
</note> 

,當我在瀏覽器中打開此,它顯示#PCDATA出現錯誤...當我用PCDATA替換它時,它沒有顯示錯誤...根據我的DTD,頁面可以包含一個標題元素...我是否正確?但是當我打開它在瀏覽器中顯示沒有錯誤,即使我有兩個標題元素..爲什麼會發生..也有什麼區別CDATA和PCDATA ....

回答

4

使用此:

<?xml version="1.0" encoding="ISO-8859-1"?> 
<!DOCTYPE note [ 
    <!ELEMENT note (page)> 
    <!ELEMENT page (#PCDATA|heading)*> 
    <!ELEMENT heading (#PCDATA)> 

]> 
<note> 
    <page> 
    hhh<heading>c</heading><heading>s</heading> 
    </page> 
</note> 

PCDATA是將由解析器解析的文本。文本將由解析器檢查實體和標記的 。

CDATA是不會被解析器解析的文本。 文本中的標籤不會被視爲標記,實體也不會被展開。

4

我的建議是挑選了一些固體驗證解析器,例如AltovaXML(社區版)是非常簡單的使用方法:

altovaxml -validate document.xml 

讓我們來看看有什麼不對您的DTD。首先你的文檔元素(根)的未命名book,所以我們從這裏得到了第一個錯誤:

錯誤中引用的模式或DTD。元素與DTD中的元素名稱'book'不匹配根 。

第二件事情是heading未聲明:

元素尚未宣佈。

最後,讓mixed content放的選擇與#PCDATA(這意味着解析的字符數據)在第一heading元素:

最後你的DTD是:

<!DOCTYPE note [ 
    <!ELEMENT note (page)> 
    <!ELEMENT page (#PCDATA | heading)*> 
    <!ELEMENT heading (#PCDATA)> 
]> 
+0

<! DOCTYPE book [ <!ELEMENT book(page)> <!ELEMENT頁面(標題| #PCDAT A)> <!ELEMENT heading(#PCDATA)> ]> 爲什麼book不是我的根元素....也是..if <!ELEMENT note(page,heading)> 是正確的原因<!ELEMENT (#PCDATA,heading)>不正確 ]> –

+0

@ user822982:好問題,<!ELEMENT頁面(#PCDATA,標題)>在DTD中不正確,因爲您不能將'#PCDATA'放入**序列**元素內容。我認爲[那個線程](http://lists.xml.org/archives/xml-dev/199911/msg00583.html)及其答案應該對你有所幫助。 –