一个验证说代码没问题,另一个验证代码无效

时间:2014-11-01 23:13:15

标签: xml dtd

好吧所以我已经花了几个小时来处理这个问题,我似乎仍然无法弄清楚问题是什么,但这是我到目前为止所做的。这是来自教师给我们验证我们的xml的网站,并且从W3学校的验证服务我没有使用下面的确切xml给出错误。我的问题是导致两种不同结果的原因,以及如何使其他验证服务接受我的代码。谢谢你的帮助。

此外,这是我收到错误的网站(指导员要求屏幕截图显示代码有效)http://www.xmlvalidation.com/

16: 10  Document root element "listing", must match DOCTYPE root "tv".
47: 11  The content of element type "listing" must match "(mfr,type,size,hdmi)".



<?xml version="1.0" encoding="UTF-8" ?>
<!--DOCTYPE tv SYSTEM "TVs2.dtd"-->
<!DOCTYPE tv [
   <!ELEMENT listing (mfr,type,size,hdmi)>
   <!ELEMENT tv (mfr,type,size,hdmi)+>
   <!ELEMENT mfr (#PCDATA)>
   <!ELEMENT type (#PCDATA)>
   <!ELEMENT size (#PCDATA)>
   <!ELEMENT hdmi (#PCDATA)>

   <!ATTLIST tv class CDATA #REQUIRED>
   <!ATTLIST tv condition CDATA #REQUIRED>
]>

<?xml-stylesheet type="text/css" href="TVs.css"?>
<listing>
    <tv class="TV" condition="new">
        <mfr>Sony</mfr>
        <type>LCD</type>
        <size>40" (39.5" diagonal)</size>
        <hdmi>4 ports</hdmi>    
    </tv>
    <tv class="TV" condition="new">
        <mfr>Samsung</mfr>
        <type>LED</type>
        <size>32"</size>
        <hdmi>3 ports</hdmi>    
    </tv>
    <tv class="Monitor" condition="used">
        <mfr>Hitachi</mfr>
        <type>PLASMA</type>
        <size>60"</size>
        <hdmi>2 ports</hdmi>        
    </tv>
    <tv class="Monitor" condition="used">
        <mfr>Toshiba</mfr>
        <type>LED</type>
        <size>75"</size>
        <hdmi>3 ports</hdmi>            
    </tv>
    <tv class="TV" condition="new">
        <mfr>LG</mfr>
        <type>LCD</type>
        <size>32"</size>
        <hdmi>3 ports</hdmi>            
    </tv>
</listing>

3 个答案:

答案 0 :(得分:1)

  

导致两种不同结果的原因

可能W3Schools(一般来说,非常糟糕)没有提供正确的DTD验证......但你没有指出那里的特定服务或程序,所以很难说。

  

我该怎么做才能让其他验证服务接受我的代码

修正错误。他们用相对简单的英语。


根元素的名称(<listing>)需要与Doctype中DOCTYPE后面的单词匹配,就像错误消息所示。

因此,要么将根元素重命名为tv,要么在DOCTYPE之后立即将字词更改为listing


<listing>允许包含mfrtypesizehdmi元素,但您已将tv个元素放在那里。

更改允许包含或更改内容的内容。

答案 1 :(得分:1)

http://validator.w3.org/#validate_by_input优于http://www.xmlvalidation.com/

W3C是官方网站(是万维网的主要国际标准组织),您的验证器是最好的。

是一张纸条。

答案 2 :(得分:0)

下面是更正后的dtd代码,这是我在列表声明中找到的内容我需要添加tv +以显示该元素将发生多次,这就是我所缺少的。

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

<!DOCTYPE listing [
   <!ELEMENT listing (tv+)>
   <!ELEMENT tv (mfr,type,size,hdmi)>
   <!ELEMENT mfr (#PCDATA)>
   <!ELEMENT type (#PCDATA)>
   <!ELEMENT size (#PCDATA)>
   <!ELEMENT hdmi (#PCDATA)>

   <!ATTLIST tv class CDATA #REQUIRED>
   <!ATTLIST tv condition CDATA #REQUIRED>
]>

<?xml-stylesheet type="text/css" href="TVs.css"?>
<listing>
    <tv class="TV" condition="new">
        <mfr>Sony</mfr>
        <type>LCD</type>
        <size>40" (39.5" diagonal)</size>
        <hdmi>4 ports</hdmi>    
    </tv>
...
</listing>