【问题标题】:Element type "firstname" must not be declared more than once?元素类型“名字”不能多次声明?
【发布时间】:2017-07-05 18:34:03
【问题描述】:

这是我在为此 XML 文档生成 DTD 时遇到的错误

Element type "firstname" must not be declared more than once line no. 21

问题:这是给定的 XML 文档

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

<!DOCTYPE order SYSTEM "order.dtd">

<order number="1">

<shipto>

    <reference customer="C001"></reference>

</shipto>

<contact>Tom</contact>

<date>

    <day>14</day>

    <month>06</month>

    <year>2017</year>

</date>

<item>

    <book>

        <isbn>1547895</isbn>

        <title>Introduction to XML</title>

        <price>1490</price>

        <author>

            <firstname>Ivan</firstname>

            <lastname>charles</lastname>

        </author>

    </book>

    <quantity>4</quantity>

    <discount>5</discount>

</item>

<item>

    <book>

        <isbn>1547885</isbn>

        <title>Java Programming</title>

        <price>2000</price>

        <author>

            <firstname>James</firstname>

        </author>

    </book>

    <quantity>4</quantity>

    <discount>5</discount>

</item>

<person id="C001">

    <firstname>Tom</firstname>

    <lastname>Richard</lastname>

    <address>

        <company>ABC</company>

        <city>Bangalore</city>

        <addressline>Electronic city</addressline>

    </address>

</person>

</order>

代码:这是我为从上面给出的 XML 文档生成 DTD 而实现的代码

<?xml version="1.0" encoding="UTF-8"?>
<!ELEMENT order (shipto,contact,date,item+,person)>
<!ELEMENT shipto (reference)>
<!ELEMENT reference (#PCDATA)>
<!ELEMENT contact (#PCDATA)>
<!ELEMENT date (day,month,year)>
<!ELEMENT day (#PCDATA)>
<!ELEMENT month (#PCDATA)>
<!ELEMENT year (#PCDATA)>
<!ELEMENT item (book+,quantity+,discount+)>
<!ELEMENT book (isbn+,title+,price+,author+)>
<!ELEMENT isbn (#PCDATA)>
<!ELEMENT title (#PCDATA)>
<!ELEMENT price (#PCDATA)>
<!ELEMENT author (firstname+,lastname*)>
<!ELEMENT firstname (#PCDATA)>                       \\line number 21
<!ELEMENT lastname (#PCDATA)>
<!ELEMENT quantity (#PCDATA)>
<!ELEMENT discount (#PCDATA)>
<!ELEMENT person (firstname,lastname,address)>
<!ELEMENT firstname (#PCDATA)>
<!ELEMENT lastname (#PCDATA)>
<!ELEMENT address (company,city,addressline)>
<!ELEMENT company (#PCDATA)>
<!ELEMENT city (#PCDATA)>
<!ELEMENT addressline (#PCDATA)>
<!ATTLIST order number ID #REQUIRED>
<!ATTLIST reference customer CDATA #REQUIRED>
<!ATTLIST person id ID #REQUIRED>

【问题讨论】:

  • 是的,你说的我明白了 :)

标签: xml dtd


【解决方案1】:

如错误所说,您可以only declare an element once

在您的 DTD 中,您已经声明了两次 firstnamelastname

尽管authorperson 都允许在其内容模型中使用名字/姓氏,但您只能声明它们一次。如果您删除一个 firstname 声明和一个 lastname 声明,您的 DTD 将是有效的。

另外,在您的 XML 中,order 元素上的number 属性值为invalid because it starts with a number

【讨论】:

    【解决方案2】:
    <?xml version="1.0" encoding="UTF-8"?>
    <!ELEMENT order (shipto,contact,date,item+,person)>
    <!ELEMENT shipto (reference)>
    <!ELEMENT reference (#PCDATA)>
    <!ELEMENT contact (#PCDATA)>
    <!ELEMENT date (day,month,year)>
    <!ELEMENT day (#PCDATA)>
    <!ELEMENT month (#PCDATA)>
    <!ELEMENT year (#PCDATA)>
    <!ELEMENT item (book+,quantity+,discount+)>
    <!ELEMENT book (isbn+,title+,price+,author+)>
    <!ELEMENT isbn (#PCDATA)>
    <!ELEMENT title (#PCDATA)>
    <!ELEMENT price (#PCDATA)>
    <!ELEMENT author (firstname+,lastname*)>
    <!ELEMENT firstname (#PCDATA)>
    <!ELEMENT lastname (#PCDATA)>
    <!ELEMENT quantity (#PCDATA)>
    <!ELEMENT discount (#PCDATA)>
    <!ELEMENT person (firstname,lastname,address)>
    <!ELEMENT address (company,city,addressline)>
    <!ELEMENT company (#PCDATA)>
    <!ELEMENT city (#PCDATA)>
    <!ELEMENT addressline (#PCDATA)>
    <!ATTLIST order number CDATA #REQUIRED>
    <!ATTLIST reference customer CDATA #REQUIRED>
    <!ATTLIST person id CDATA #REQUIRED>
    

    这是正确的代码。请检查

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-11-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多