xml的问题

时间:2011-08-28 09:31:43

标签: xml dtd cdata pcdata

我是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,页面可以只包含一个标题元素.. .am我对吗?但是当我在浏览器中打开它时,即使我有两个标题元素也没有显示任何错误。为什么会发生这种情况.. CDATA和PCDATA之间有什么区别....

2 个答案:

答案 0 :(得分: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 是解析器不会解析的文本。里面的标签   文本不会被视为标记,实体也不会被扩展。

答案 1 :(得分:4)

我的建议是选择一些可靠的验证解析器,例如AltovaXML(Community Edition)非常简单易用:

altovaxml -validate document.xml

让我们来看看您的DTD有什么问题。首先,您的文档元素(根)未命名为book,因此我们从此处收到第一个错误:

  

引用的架构或DTD出错。元素与root不匹配   来自DTD的元素名称'book'。

第二件事是heading未被声明:

  

元素尚未声明。

最后允许mixed content选择#PCDATA(即解析后的字符数据)首先heading元素:

最后你的DTD是:

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