2011-08-28 62 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)及其答案应该对你有所帮助。 –