【问题标题】:One validation says code is okay, another say it is not valid一个验证说代码没问题,另一个说它无效
【发布时间】:2014-12-04 19:26:03
【问题描述】:

好的,所以我已经用这个工具解决了几个小时,但我似乎仍然无法弄清楚问题是什么,但这就是我目前所拥有的。这是来自教师为我们验证 xml 提供的站点,以及来自 W3 Schools 的验证服务,使用下面的确切 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>

【问题讨论】:

    标签: xml dtd


    【解决方案1】:

    导致两种不同结果的原因

    很可能,W3Schools(一般来说,很糟糕)没有提供适当的 DTD 验证……但你没有指向那里的特定服务或程序,所以很难说。

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

    修复错误。他们的英语比较通俗。


    根元素的名称 (&lt;listing&gt;) 需要与 Doctype 中紧跟在 DOCTYPE 之后的单词匹配,正如错误消息所述。

    因此,要么将根元素重命名为 tv,要么将紧跟在 DOCTYPE 之后的单词更改为 listing


    &lt;listing&gt; 允许包含mfrtypesizehdmi 元素,但您已将tv 元素放在那里。

    更改允许包含的内容或更改您在其中放置的内容。

    【讨论】:

    • 你的意思是我一直在做这件事(从早上 7 点开始)。无论出于何种原因,我的帖子 (xmlvalidation.com) 中的验证服务 THIS SITE 给出了我包含的错误或这个错误(47:11 元素类型“列表”的内容必须匹配“(tv,mfr,type,尺寸,hdmi)".)。我在这方面投入了很多时间,这就是我在这里要求不要有人为我做这件事的原因。
    • @JohnDziendziel — 您在问题中提供的代码是错误的,应该会产生这些错误。如果您已修复它们并且仍然收到错误,那么您应该更新问题以包含更正的代码。 (当我做出我在这个答案中提到的更改时,xmlvalidation.com/ 说它是有效的)。
    【解决方案2】:

    你有http://validator.w3.org/#validate_by_inputhttp://www.xmlvalidation.com/ 好。

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

    是笔记。

    【讨论】:

      【解决方案3】:

      以下是更正后的 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>
      

      【讨论】:

        猜你喜欢
        • 2014-01-18
        • 1970-01-01
        • 1970-01-01
        • 2016-08-11
        • 1970-01-01
        • 2010-11-16
        • 1970-01-01
        • 2022-01-25
        • 1970-01-01
        相关资源
        最近更新 更多