【问题标题】:Problem with xmlxml的问题
【发布时间】:2011-11-05 09:55:48
【问题描述】:

我是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 之间的区别....

【问题讨论】:

    标签: xml dtd cdata pcdata


    【解决方案1】:

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

    altovaxml -validate document.xml
    

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

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

    第二件事是heading没有被声明:

    元素尚未声明。

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

    最后你的 DTD 是:

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

    【讨论】:

    • ]> 为什么 book 不是我的根元素....also ..if 是正确的,为什么 不正确 ]>
    • @user822982:好问题,&lt;!ELEMENT page(#PCDATA,heading)&gt; 在 DTD 中不正确,因为您不能将 #PCDATA 放入 sequence 元素内容中。我认为that thread 及其答案应该对您有所帮助。
    【解决方案2】:

    使用这个:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2023-03-26
      • 1970-01-01
      • 2010-09-29
      • 2021-01-30
      • 2011-08-07
      • 1970-01-01
      • 2023-03-20
      相关资源
      最近更新 更多