1

我是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

2 回答 2

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是不会被解析器解析的文本。文本内的标签不会被视为标记,实体也不会被扩展。

于 2011-08-28T09:58:04.633 回答
4

我的建议是选择一些可靠的验证解析器,例如AltovaXML(社区版)使用起来非常简单:

altovaxml -validate document.xml

让我们看看您的 DTD 有什么问题。首先,您的文档元素(根)没有命名book,所以我们从这里得到了第一个错误:

引用的架构或 DTD 中的错误。元素与 DTD 中的根元素名称“book”不匹配。

第二件事是heading没有声明:

尚未声明元素。

最后,允许混合内容首先选择#PCDATA(这意味着已解析的字符数据)和元素:heading

最后,您的 DTD 是:

<!DOCTYPE note [
    <!ELEMENT note (page)>
    <!ELEMENT page (#PCDATA | heading)*>
    <!ELEMENT heading (#PCDATA)>
]>
于 2011-08-28T10:04:48.500 回答