【问题标题】:Notepad++ validating XML against local DTDNotepad++ 根据本地 DTD 验证 XML
【发布时间】:2015-12-24 22:20:58
【问题描述】:

我有一个 XML 文件,我正在尝试针对 DTD 进行验证(在与 XML 相同的本地文件夹中)。 XML 以格式正确的方式检出,但每次尝试在 notepad++ 中针对 DTD 进行验证都会导致“无法加载 DTD PresidentsDTD.dtd”错误。知道我需要做什么才能使其正常工作吗?

XML 文件:

<?xml version="1.0" standalone="no"?>
<!DOCTYPE LIST SYSTEM "PresidentsDTD.dtd">

<LIST>
<PRESIDENT id="01" gender="male" name="GeorgeWashington">
    <NAME>
        <FIRST>George</FIRST>
        <MIDDLE />
        <LAST>Washington</LAST>
    </NAME>
    <TERM count="2">
        <TERMSTART>1789</TERMSTART>
        <TERMEND>1797</TERMEND>
        <TERML unit="years"> 8  </TERML>
    </TERM>
    <PARTY>N/A</PARTY>
    <HOMESTATE>Virginia</HOMESTATE>
</PRESIDENT>

<PRESIDENT id="02" gender="male" name="JohnAdams">
    <NAME>
        <FIRST>John</FIRST>
        <MIDDLE />
        <LAST>Adams</LAST>
    </NAME>
    <TERM count="2">    
        <TERMSTART>1797</TERMSTART>
        <TERMEND>1801</TERMEND>
        <TERML unit="years"> 8  </TERML>
    </TERM>
    <PARTY>Federalist</PARTY>
    <HOMESTATE>Massachusetts</HOMESTATE>
</PRESIDENT>

<PRESIDENT id="03" gender="male" name="ThomasJefferson">
    <NAME>
        <FIRST>Thomas</FIRST>
        <MIDDLE />
        <LAST>Jefferson</LAST>
    </NAME>
    <TERM count="2">
        <TERMSTART>1801</TERMSTART>
        <TERMEND>1809</TERMEND>
        <TERML unit="years"> 8  </TERML>
    </TERM>
    <PARTY>Republican-Democrat</PARTY>
    <HOMESTATE>Virginia</HOMESTATE>
</PRESIDENT>

<PRESIDENT id="07" gender="male" name="AndrewJackson">
    <NAME>
        <FIRST>Andrew</FIRST>
        <MIDDLE />
        <LAST>Jackson</LAST>
    </NAME>
    <TERM count="2">
        <TERMSTART>1829</TERMSTART>
        <TERMEND>1837</TERMEND>
        <TERML unit="years"> 8  </TERML>
    </TERM>
    <PARTY>Democrat</PARTY>
    <HOMESTATE>Tennesee</HOMESTATE>
</PRESIDENT>

<PRESIDENT id="09" gender="male" name="WilliamHenryHarrison">
    <NAME>
        <FIRST>William</FIRST>
        <MIDDLE>Henry</MIDDLE>
        <LAST>Harrison</LAST>
    </NAME>
    <TERM count="1">
        <TERMSTART>1841</TERMSTART>
        <TERMEND>1841</TERMEND>
        <TERML unit="months"> 1 </TERML>
    </TERM>
    <PARTY>Whig</PARTY>
    <HOMESTATE>Ohio</HOMESTATE>
</PRESIDENT>

<PRESIDENT id="15" gender="male" name="AbrahamLincoln">
    <NAME>
        <FIRST>Abraham</FIRST>
        <MIDDLE />
        <LAST>Lincoln</LAST>
    </NAME>
    <TERM count="2">
        <TERMSTART>1861</TERMSTART>
        <TERMEND>1865</TERMEND>
        <TERML unit="years"> 4  </TERML>
    </TERM>
    <PARTY>Republican</PARTY>
    <HOMESTATE>Illinois</HOMESTATE>
</PRESIDENT>
</LIST>

我的 PresidentsDTD.dtd 文件(由于某种原因仍然在第 2 行返回错误):

<!DOCTYPE LIST[
<!ELEMENT LIST PRESIDENT+>
<!ELEMENT PRESIDENT (NAME, TERM, PARTY, HOMESTATE)>
<!ATTLIST PRESIDENT id ID #REQUIRED>
<!ATTLIST PRESIDENT gender (male | female) #IMPLIED>
<!ATTLIST PRESIDENT name CDATA #IMPLIED>
<!ELEMENT NAME (FIRST, MIDDLE?, LAST)>
<!ELEMENT TERM (TERMSTART, TERMEND, TERMLENGTH)>
<!ATTLIST TERM count CDATA #IMPLIED>
<!ELEMENT FIRST (#PCDATA)>
<!ELEMENT MIDDLE (#PCDATA)>
<!ELEMENT LAST (#PCDATA)>
<!ELEMENT TERMSTART (#PCDATA)>
<!ELEMENT TERMEND (#PCDATA)>
<!ELEMENT TERMLENGTH (#PCDATA)>
<!ATTLIST TERMLENGTH unit (months | years) #IMPLIED>
]>

有没有人有针对本地 DTD 进行验证的解决方案?

【问题讨论】:

    标签: xml notepad++ dtd


    【解决方案1】:

    我编辑了您的 XML 和 .dtd 文件。现在 XML 是有效的。请注意,在文件中,我在您的错误上添加了 cmets。 XML 文件:

    <?xml version="1.0" standalone="no"?>
        <!DOCTYPE LIST SYSTEM "PresidentsDTD.dtd">
        <LIST>
        <PRESIDENT id="ID01" gender="male" name="GeorgeWashington"> <!--id must be unique-->
            <NAME>
                <FIRST>George</FIRST>
                <MIDDLE />
                <LAST>Washington</LAST>
            </NAME>
            <TERM count="2">
                <TERMSTART>1789</TERMSTART>
                <TERMEND>1797</TERMEND>
                <TERMLENGTH unit="years"> 8  </TERMLENGTH> <!--You have <TERML> in XML and <TERMLENGTH> in .dtd-->
            </TERM>
            <PARTY>N/A</PARTY>
            <HOMESTATE>Virginia</HOMESTATE>
        </PRESIDENT>
    
        <PRESIDENT id="ID02" gender="male" name="JohnAdams">
            <NAME>
                <FIRST>John</FIRST>
                <MIDDLE />
                <LAST>Adams</LAST>
            </NAME>
            <TERM count="2">    
                <TERMSTART>1797</TERMSTART>
                <TERMEND>1801</TERMEND>
                <TERMLENGTH unit="years"> 8  </TERMLENGTH>
            </TERM>
            <PARTY>Federalist</PARTY>
            <HOMESTATE>Massachusetts</HOMESTATE>
        </PRESIDENT>
    
        <PRESIDENT id="ID03" gender="male" name="ThomasJefferson">
            <NAME>
                <FIRST>Thomas</FIRST>
                <MIDDLE />
                <LAST>Jefferson</LAST>
            </NAME>
            <TERM count="2">
                <TERMSTART>1801</TERMSTART>
                <TERMEND>1809</TERMEND>
                <TERMLENGTH unit="years"> 8  </TERMLENGTH>
            </TERM>
            <PARTY>Republican-Democrat</PARTY>
            <HOMESTATE>Virginia</HOMESTATE>
        </PRESIDENT>
    
        <PRESIDENT id="ID07" gender="male" name="AndrewJackson">
            <NAME>
                <FIRST>Andrew</FIRST>
                <MIDDLE />
                <LAST>Jackson</LAST>
            </NAME>
            <TERM count="2">
                <TERMSTART>1829</TERMSTART>
                <TERMEND>1837</TERMEND>
                <TERMLENGTH unit="years"> 8  </TERMLENGTH>
            </TERM>
            <PARTY>Democrat</PARTY>
            <HOMESTATE>Tennesee</HOMESTATE>
        </PRESIDENT>
    
        <PRESIDENT id="ID09" gender="male" name="WilliamHenryHarrison">
            <NAME>
                <FIRST>William</FIRST>
                <MIDDLE>Henry</MIDDLE>
                <LAST>Harrison</LAST>
            </NAME>
            <TERM count="1">
                <TERMSTART>1841</TERMSTART>
                <TERMEND>1841</TERMEND>
                <TERMLENGTH unit="months"> 1 </TERMLENGTH>
            </TERM>
            <PARTY>Whig</PARTY>
            <HOMESTATE>Ohio</HOMESTATE>
        </PRESIDENT>
    
        <PRESIDENT id="ID15" gender="male" name="AbrahamLincoln">
            <NAME>
                <FIRST>Abraham</FIRST>
                <MIDDLE />
                <LAST>Lincoln</LAST>
            </NAME>
            <TERM count="2">
                <TERMSTART>1861</TERMSTART>
                <TERMEND>1865</TERMEND>
                <TERMLENGTH unit="years"> 4  </TERMLENGTH>
            </TERM>
            <PARTY>Republican</PARTY>
            <HOMESTATE>Illinois</HOMESTATE>
        </PRESIDENT>
        </LIST>
    

    如果您从 XML 中单独创建文件 DTD 架构,则它不应包含“[”]“。您没有定义 PARTY 和 HOMESTATE。您在 PRESIDENT 中定义了错误的属性。
    总统DTD.dtd:

    <!ELEMENT LIST (PRESIDENT+)>
    
    <!ELEMENT PRESIDENT (NAME, TERM, PARTY, HOMESTATE)>
    
    <!ELEMENT NAME (FIRST, MIDDLE?, LAST)>
    <!ELEMENT FIRST (#PCDATA)>
    <!ELEMENT MIDDLE (#PCDATA)>
    <!ELEMENT LAST (#PCDATA)> 
    
    <!ELEMENT TERM (TERMSTART, TERMEND, TERMLENGTH)>
    <!ELEMENT TERMSTART (#PCDATA)>
    <!ELEMENT TERMEND (#PCDATA)>
    <!ELEMENT TERMLENGTH (#PCDATA)>
    
    <!ELEMENT PARTY (#PCDATA)>
    <!ELEMENT HOMESTATE (#PCDATA)>
    
    
    <!ATTLIST PRESIDENT 
                id ID #REQUIRED 
                gender (male | female) #IMPLIED 
                name CDATA #IMPLIED>
    <!ATTLIST TERM 
                count CDATA #IMPLIED>
    <!ATTLIST TERMLENGTH 
                unit (months | years) #IMPLIED>
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-05-05
      • 1970-01-01
      • 2014-03-17
      • 1970-01-01
      • 1970-01-01
      • 2010-12-12
      • 1970-01-01
      相关资源
      最近更新 更多