【问题标题】:Having trouble understanding XML DTD. Getting getting root element not well formed error when I parse无法理解 XML DTD。解析时获取根元素格式错误
【发布时间】:2014-07-11 11:05:11
【问题描述】:

我是 XML 新手。我正在处理一项任务,但我被困在外部 DTD 验证上。当我解析说根元素格式不正确的文件时出现错误。两个文件都在同一个目录中。

这是外部 DTD:

   <!DOCTYPE atoms [
   <!ELEMENT atoms (hydrogen, carbon, oxygen, titanium, uranium)>
   <!ATTLIST atoms properties CDATA #REQUIRED>
   <!ELEMENT hydrogen (#PCDATA)>
   <!ELEMENT carbon (#PCDATA)>
   <!ELEMENT oxygen (#PCDATA)>
   <!ELEMENT titanium (#PCDATA)>
   <!ELEMENT uranium (#PCDATA)> 
   <!ATTLIST properties symbol CDATA #REQUIRED>
   <!ATTLIST properties name CDATA #REQUIRED>
   <!ATTLIST properties atomicNumber CDATA #REQUIRED>
   <!ATTLIST properties atomicWeight CDATA #REQUIRED>
   ]>

这是我的 XML 文件:

<?xml version="1.0" encoding="UTF-8"?>
<!--DTD is in a local directory file named atoms.dtd -->
<!-- Week 3 Homework -->
<!DOCTYPE atoms SYSTEM "atoms.dtd">    
  <atoms>
    <hydrogen>   
        <properties symbol="H" name="Hydrogen" atomicNumber="1" atomicWeight="1.00794"/>
    </hydrogen>

    <carbon>   
        <properties symbol="C" name="Carbon" atomicNumber="6" atomicWeight="12.011"/>
    </carbon>

    <oxygen>   
        <properties symbol="O" name="Oxygen" atomicNumber="8" atomicWeight="15.999"/>
    </oxygen>

    <titanium>   
        <properties symbol="Ti" name="Titanium" atomicNumber="22" atomicWeight="47.867"/>
    </titanium>

    <uranium>   
        <properties symbol="U" name="Uranium" atomicNumber="92" atomicWeight="238.03"/>
    </uranium>
  </atoms>

编辑:

我刚刚尝试过这种方式,但解析时仍然出现错误。

外部DTD:

    <!DOCTYPE atoms [ <!ELEMENT atoms (atom+)>  
    <!ELEMENT atom (symbol, name, atomicNumber, atomicWeight)>
    <!ELEMENT symbol (#PCDATA)>
    <!ELEMENT name (#PCDATA)>
    <!ELEMENT atomicNumber (#PCDATA)>
    <!ELEMENT atomicWeight (#PCDATA)> ]>

XML:

    <?xml version="1.0" encoding="UTF-8"?>
    <!--DTD is in a local directory file named atomsV2.dtd -->
    <!-- Week 3 Homework -->
    <!DOCTYPE atoms SYSTEM "atomsV2.dtd"> 
        <atoms>
            <atom> 
                <symbol H />
                <name Hydrogen />
                <atomicNumber 1 />
                <atomicWeight 1.00794 />
           </atom>

            <atom>   
                <symbol C />
                <name Carbon />
                <atomicNumber 6 />
                <atomicWeight 12.011 />
            </atom>

            <atom>   
                <symbol O />
                <name Oxygen />
                <atomicNumber 8 />
                <atomicWeight 15.999 />
            </atom>

            <atom>   
                <symbol Ti />
                <name Titanium />
                <atomicNumber 22 />
                <atomicWeight 47.867 />
            </atom>

            <atom>   
                <symbol U />
                <name Uranium />
                <atomicNumber 92 />
                <atomicWeight 238.03 />
            </atom>
         </atoms>

【问题讨论】:

标签: xml validation dtd


【解决方案1】:

这是一个有效的版本。您的问题显示了 2 个具有完全不同结构的不同 XML/DTD 对,因此如果这不是您要寻找的答案,请更新您的问题。

另外,请参阅 External referenced DTD in XML 以更好地解释您所做的事情为何不起作用。

外部 DTD

<!ELEMENT atoms (hydrogen, carbon, oxygen, titanium, uranium)>
<!ATTLIST atoms properties CDATA #IMPLIED>
<!ELEMENT hydrogen (properties)>
<!ELEMENT carbon (properties)>
<!ELEMENT oxygen (properties)>
<!ELEMENT titanium (properties)>
<!ELEMENT uranium (properties)>
<!ELEMENT properties EMPTY>
<!ATTLIST properties 
    symbol CDATA #REQUIRED
    name CDATA #REQUIRED
    atomicNumber CDATA #REQUIRED
    atomicWeight CDATA #REQUIRED>

XML

<!DOCTYPE atoms SYSTEM "atoms.dtd">
<atoms>
    <hydrogen>   
        <properties symbol="H" name="Hydrogen" atomicNumber="1" atomicWeight="1.00794"/>
    </hydrogen>

    <carbon>   
        <properties symbol="C" name="Carbon" atomicNumber="6" atomicWeight="12.011"/>
    </carbon>

    <oxygen>   
        <properties symbol="O" name="Oxygen" atomicNumber="8" atomicWeight="15.999"/>
    </oxygen>

    <titanium>   
        <properties symbol="Ti" name="Titanium" atomicNumber="22" atomicWeight="47.867"/>
    </titanium>

    <uranium>   
        <properties symbol="U" name="Uranium" atomicNumber="92" atomicWeight="238.03"/>
    </uranium>
</atoms>

【讨论】:

    猜你喜欢
    • 2013-02-08
    • 2017-09-22
    • 1970-01-01
    • 2017-02-16
    • 2023-03-13
    • 1970-01-01
    • 2016-04-23
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多