使用Given DTD脚本知道相应的XML是否正确

时间:2012-02-26 11:07:30

标签: xml xml-parsing dtd dtd-parsing xml-dtd

我如何知道我创建的XML是否遵循DTD中的规则?

这是我的XML

<?xml version="1.0" encoding="ISO-8859-1"?>
<!DOCTYPE HW SYSTEM "HW.dtd">
<A>
    AA = "BAR"
    AB = "FOO"
    AC = "1"
    <C>
        <B/>
        CA = "Name"
    </C>
    <D>Element</D>
</A>

这是我的DTD

<?xml version="1.0" encoding="ISO-8859-1"?>
<!ELEMENT A (B* |C+,D)>
<ATTLIST A
    AA CDATA #REQUIRED
    AB CDATA #REQUIRED
    AC(0|1|2) #REQUIRED
>
<!ELEMENT B EMPTY>
<!ATTLIST C(B)>
<!ATTLIST C
    CA CDATA #REQUIRED
>
<!ELEMENT D (#PCDATA)>

我的XML是否与DTD一致?

1 个答案:

答案 0 :(得分:1)

您需要使用XML验证器

在线版本为http://www.xmlvalidation.com/,还有很多工具可以做到这一点

根据验证者的说法,您的DTD无效

我试图修复你的DTD,这是固定版本

<?xml version="1.0" encoding="ISO-8859-1"?>
<!ELEMENT A (B* | (C+,D))>
<!ATTLIST A
    AA CDATA #REQUIRED
    AB CDATA #REQUIRED
    AC (0|1|2) #REQUIRED
>
<!ELEMENT B EMPTY>
<!ELEMENT C EMPTY>
<!ATTLIST C
    CA CDATA #REQUIRED
>
<!ELEMENT D (#PCDATA)>

您发布的DTD问题是:

据我所知,您需要C +周围的括号,D上面的<ATTLIST也不正确,因为您指定了<!ATTLIST的属性列表注意!失踪了。

你的DTD还有

<!ELEMENT B EMPTY>
<!ATTLIST C
    CA CDATA #REQUIRED
>

当您从元素C <!ATTLIST C定义属性列表但未在DTD中定义元素C时,验证失败,因此我将其更改为

<!ELEMENT C EMPTY>
<!ATTLIST C
    CA CDATA #REQUIRED
>

这使您的DTD有效

你的XML在很多方面都是错误的

例如您的DTD指定

<!ATTLIST A
    AA CDATA #REQUIRED
    AB CDATA #REQUIRED
    AC (0|1|2) #REQUIRED
>

这意味着元素A必须具有AA BB AC属性,因为它们是必需的,AC属性必须为0或1或2

你已经放

<A>
    AA = "BAR"
    AB = "FOO"
    AC = "1"

未在元素A中指定XML属性,以指定它应该是

的属性
<A AA="BAR" AB="FOO" AC="1">

这可以帮助你做功课

这是一个DTD教程的链接http://www.quackit.com/xml/tutorial/dtd_introduction.cfm,这可以帮助您创建一个验证它的XML文档