【问题标题】:Keep getting "No declaration for element" errors. What is wrong with this XML/DTD?不断收到“没有元素声明”错误。这个 XML/DTD 有什么问题?
【发布时间】:2020-01-07 07:20:00
【问题描述】:

我创建了一个简单的 XML 和一个 DTD,但由于某种原因,我尝试的每个验证器都在每一行上不断给我“没有元素声明”错误。我不太确定我做错了什么,因为我才刚刚开始研究 XML 和 DTD,并且希望得到一些见解,所以我知道我做错了什么并且可以改进。任何和所有的帮助都将不胜感激,所以我知道将来该怎么做。

<?xml version="1.0" encoding="UTF-8"?>    

<!ELEMENT BILLER (RESTAURANTNAME,ADRESS,COMPANYPHONE,CVR)>

<!ELEMENT TIME (DATE,CLOCK)>
<!ELEMENT ORDER (MENUITEM+,CUSTOMER)>

<!ELEMENT RESTAURANTNAME (#PCDATA)>
<!ELEMENT ADRESS (#PCDATA)>
<!ELEMENT COMPANYPHONE (#PCDATA)>
<!ELEMENT CVR (#PCDATA)>
<!ELEMENT DATE (#PCDATA)>
<!ELEMENT CLOCK (#PCDATA)>

<!ELEMENT MENUITEM (FOOD,REQUEST,REQUESTPRICE?,QUANTITY,PRICETOTAL)>
<!ELEMENT CUSTOMER (TABLE,NAME,SPECIALTYPING,PAYMENTMETHOD)>

<!ELEMENT FOOD (#PCDATA)>
<!ELEMENT REQUEST (#PCDATA)>
<!ELEMENT REQUESTPRICE (#PCDATA)>
<!ELEMENT QUANTITY (#PCDATA)>
<!ELEMENT PRICETOTAL (#PCDATA)>

<!ELEMENT TABLE (#PCDATA)>
<!ELEMENT NAME (#PCDATA)>
<!ELEMENT SPECIALTYPING (#PCDATA)>
<!ELEMENT PAYMENTMETHOD (#PCDATA)>
]>
<regning id="122">    
<tidspunkt>
  <dato>03</dato>
  <måned>01</måned>
  <år>2020</år>
  <tid>13.40</tid>
</tidspunkt>

<restaurant>
<restaurantnavn>Restaurant Fixi</restaurantnavn>
<adresse>Havstreet 128, 478 Andeby</adresse>
<telefon>81 19 26 18</telefon>
<cvr>29 23 28 00</cvr>
</restaurant>

<kundeinfo>
<bord>3</bord>
<kunde-nr>122</kunde-nr>
<specielt>vegetar</specielt>
<betaling>KONTANT</betaling>
</kundeinfo>

<tjener>
        <fornavn>Lotti</fornavn>
        <efternavn>Andersen</efternavn>
</tjener>

<ordre>
  <menugenstand>
    <madtitel>Vegetar Lakseburger med fritter</madtitel>
    <ekstra>x</ekstra>
    <quantity>1</quantity>
    <pris valuta="DKK">80</pris>
  </menugenstand>

<menugenstand>
    <drikketitel>Økologisk hvedeøl</drikketitel>
    <ekstra>x</ekstra>
    <quantity>1</quantity>
    <pris valuta="DKK">45</pris>
  </menugenstand>

  <menugenstand>
    <madtitel>Båd Banannasplit</madtitel>
    <ekstra>Ekstra flødeskum</ekstra>
    <requestprice>10</requestprice>
    <quantity>1</quantity>
  <pris valuta="DKK">55</pris>
  </menugenstand>

</ordre>
</regning>

【问题讨论】:

    标签: xml dtd


    【解决方案1】:

    XML 文档必须格式正确(语法正常、一个根元素、所有元素都关闭等),但此外它也可以针对 DTD 或 XML Schema 有效。在 DTD(文档类型定义)的情况下,DTD 管理 内容模型,即根元素是什么,特定元素可以包含哪些其他元素,可以有哪些属性等,等等。我鼓励您实际阅读XML specification。没那么难。

    因此,在您的示例中,&lt;regning&gt; 元素未在 DTD 中定义,并且由于 XML 元素名称(标签)区分大小写,因此您的 XML 文档中没有任何元素与任何 ELEMENT 声明匹配在 DTD 中。要匹配您的 XML 文档,DTD 必须以如下内容开头:

    <?xml version="1.0" encoding="UTF-8"?>
    <!DOCTYPE regning [
    <!ELEMENT regning (tidspunkt, restaurant, kundeinfo, tjener, ordre) >
    <!ATTLIST regning id ID #REQUIRED >
     ... rest of the content model ...
    ]>
    <regning id="122">'
        ...
    </regning>
    

    【讨论】:

      【解决方案2】:

      您没有定义 DOCTYPE 根元素开始。

      我没有看到您的 DOCTYPE 定义与您的 XML 之间非常相似。解决这个问题的第一步是

      <?xml version="1.0" encoding="UTF-8"?>    
      <!DOCTYPE regning [
      ...
      

      其他的不清楚。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2012-11-06
        • 1970-01-01
        • 1970-01-01
        • 2012-08-16
        • 2023-01-20
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多