2015-08-02 2 views
4

У меня есть XML-файл "sample.xml", как:как я могу проверить xml против dtd с помощью python?

<?xml version="1.0" encoding="UTF8" ?> 
< !DOCTYPE nodedescription SYSTEM "sample.dtd" > 
<node_description> 
    <target id="windows 32bit"> 
     <graphics>nvidia_970</graphics> 
     <power_plug_type>energenie_eu</power_plug_type> 
     <test>unit test</test> 
    </target> 
    <target id="windows 64bit"> 
     <graphics>nvidia_870</graphics> 
     <power_plug_type>energenie_eu</power_plug_type> 
     <test>performance test</test> 
    </target> 
</node_description> 

и соответствующие ОТД как "sample.dtd":

<?xml version="1.0" encoding="UTF-8"?> 
<!ELEMENT node_description (target)*> 
<!ATTLIST target id CDATA #REQUIRED> 
<!ELEMENT target (graphics, power_plug_type, test)> 
<!ELEMENT graphics (#PCDATA)*> 
<!ELEMENT power_plug_type (#PCDATA)*> 
<!ELEMENT test (#PCDATA)*> 

Я хочу, чтобы "sample.xml", чтобы получить сверяются " sample.dtd ", используя скрипт python. Как я могу это достичь? любезную помощь.

+0

возможный дубликат [DTD Проверка с помощью Python?] (Http://stackoverflow.com/questions/270460/dtd-validation-with-python) – hoijui

+1

возможно дубликат [Как проверить XML против DTD файл в Python] (http://stackoverflow.com/questions/15798/how-do-i-validate-xml-against-a-dtd-file-in-python) – har07

ответ

0

lxml Lib хорошо подходит для этого:

С sample.txt и sample.dtd в текущем рабочем каталоге, вы можете просто запустить:

from lxml import etree 
parser = etree.XMLParser(dtd_validation=True) 
tree = etree.parse("sample.xml", parser) 

Результаты в:

XMLSyntaxError: root and DTD name do not match 'node_description' and 'nodedescription', line 3, column 18 

Престола here для более подробной информации. Кроме того, a related question

+0

У меня есть пакет lxml в моей системе, но когда Я запускаю свой скрипт, чтобы не найти модуль lxml. Как его решить? –

+0

Может быть, он установлен для другого питона? попробуйте 'pip install lxml'? – lemonhead

Смежные вопросы