为什么DTD的验证在元素类型“Invoice”的声明中需要错误“A”)?

问题描述 投票:2回答:1

我正在写一个DTD到我的XML文件。我得到同样的错误“A')'在元素类型”Invoice“的声明中需要元素”Invoice“。我的DTD匹配我的XML,名称是正确的,元素的顺序是正确的。任何帮助,将不胜感激。下面是我的DTD和XML文件。

我已经尝试重新排序DTD的元素,查看我的XML试图找到一个错误,但似乎没有任何工作。

<!ELEMENT InvoiceList (Invoice*) >
<!ELEMENT Invoice (Client, Company, TaxNumber|USt-IdNr, ServicesList, Date, Amount, BankAccount) >
<!ATTLIST Invoice NumberOfInvoice CDATA #IMPLIED>

<!ELEMENT Client (Name, Address)>
<!ELEMENT Name (#PCDATA) >

<!ELEMENT Address (Street, ZipCode, City) >

<!ELEMENT Street (Name, Number) >
<!ELEMENT Number (#PCDATA) >
<!ELEMENT ZipCode (#PCDATA) >
<!ELEMENT City (#PCDATA) >

<!ELEMENT Company (Name, Address) >
<!ELEMENT TaxNumber (#PCDATA) >
<!ELEMENT USt-IdNr (#PCDATA) >

<!ELEMENT ServiceList (Service) >
<!ELEMENT Service (Position, Name, MwSt, Quantity, SinglePrice, TotalPrice) >
<!ATTLIST Service Date CDATA #IMPLIED>
<!ELEMENT Position (#PCDATA) >
<!ELEMENT MwSt (#PCDATA) >
<!ELEMENT Quantity (#PCDATA) >
<!ELEMENT SinglePrice (#PCDATA) >
<!ELEMENT TotalPrice (#PCDATA) >
<!ELEMENT Date (#PCDATA) >

<!ELEMENT Amount (Total|Brutto, Netto, MwSt) >
<!ELEMENT Total (#PCDATA) >
<!ELEMENT Brutto (#PCDATA) >
<!ELEMENT Netto (#PCDATA) >

<!ELEMENT BankAccount (Name, Bank, BLZ, AccountNumber) >
<!ELEMENT Bank (#PCDATA) >
<!ELEMENT BLZ (#PCDATA) >
<!ELEMENT AccountNumber (#PCDATA) >

<InvoiceList>
<Invoice NumberOfInvoice="657321">
        <Client>
            <Name>Frau Sybille Sonder-Sutterrau</Name>
            <Address>
                <Street>
                    <Name>Am Süttelbach</Name>
                    <Number>17</Number> 
                </Street>
                <ZipCode>77070</ZipCode>
                <City>Siedelsuderstadt</City>
            </Address>
        </Client>
        <Company>
            <Name>Kleintier Meier GmbH</Name>
            <Address>
                <Street>
                    <Name>Meierring</Name>
                    <Number>3</Number> 
                </Street>
                <ZipCode>81828</ZipCode>
                <City>Machthausen</City>
            </Address>
            <ContactInformation>
                <PhoneNumber>0777/987987</PhoneNumber>
                <Fax>0777/987789</Fax>
                <EMail>[email protected]</EMail>
            </ContactInformation>
        </Company> 
        <TaxNumber>88 123/8282 2</TaxNumber>
        <ServicesList>
            <Service Date="1.1.2017">
                <Position>1</Position>
                <Name>Antike Holzwürmer</Name>
                <MwSt>19%</MwSt>
                <Quantity>100</Quantity>
                <SinglePrice>1,50</SinglePrice>
                <TotalPrice>150,00</TotalPrice>
            </Service>
            <Service Date="12.1.2017">
                <Position>2</Position>
                <Name>Holzwurmfutter</Name>
                <MwSt>19%</MwSt>
                <Quantity>1</Quantity>
                <SinglePrice>34,45</SinglePrice>
                <TotalPrice>34,45</TotalPrice>
            </Service>
            <Service Date="12.1.2017">
                <Position>3</Position>
                <Name>Steinlaus, Petrophaga lorioti</Name>
                <MwSt>19%</MwSt>
                <Quantity>1</Quantity>
                <SinglePrice>777,77</SinglePrice>
                <TotalPrice>777,77</TotalPrice>
            </Service>
        </ServicesList>
        <Date>15.1.2017</Date>
        <Amount>
            <Brutto>962,22</Brutto>
            <Netto>808,59</Netto>
            <Mwst>153,63</Mwst> 
        </Amount>
        <BankAccount>
            <Name>Kleintier Meier</Name>
            <Bank>Sparkasse Karlsruhe</Bank>
            <BLZ>66050101</BLZ>
            <AccountNumber>987654321</AccountNumber>
        </BankAccount>
    </Invoice>

我正在使用Eclipse来验证它。

xml validation dtd
1个回答
1
投票

使用|时,您应该将该组包装在括号中。

你应该更新InvoiceAmount声明......

<!ELEMENT Invoice (Client, Company, (TaxNumber|USt-IdNr), ServicesList, Date, Amount, BankAccount) >

<!ELEMENT Amount ((Total|Brutto), Netto, MwSt) >

在这些更改之后,您的DTD将有效,但可能不正确;你的XML仍然无法验证,因为仍有一些问题......

  • ContactInformation不允许作为Company的孩子(并且ContactInformation和它的孩子(PhoneNumberFaxEMail)在DTD中根本没有被宣布)
  • 元素ServicesList未在DTD中声明。虽然宣布了ServiceList所以你可能只是错过了声明名称中的s
  • 你在XML中使用Mwst但在DTD中它被声明为MwSt(注意大小写)。
© www.soinside.com 2019 - 2024. All rights reserved.