2008-08-15 10 views
7

क्या कोई तरीका है, जब मैं एलएक्सएमएल का उपयोग कर एक XML दस्तावेज़ का विश्लेषण करता हूं, उस दस्तावेज़ को बाहरी कैटलॉग फ़ाइल का उपयोग करके अपने डीटीडी के विरुद्ध सत्यापित करने के लिए? मुझे दस्तावेज़ के डीटीडी में परिभाषित निश्चित विशेषताओं को काम करने में सक्षम होना चाहिए।पायथन के एलएक्सएमएल के साथ एक एक्सएमएल कैटलॉग का उपयोग करना?

उत्तर

1

क्या आप एक उदाहरण दे सकते हैं? lxml validation docs के अनुसार, एलएक्सएमएल डीटीडी सत्यापन (एक्सएमएल दस्तावेज़ में या बाहरी रूप से कोड में निर्दिष्ट) और सिस्टम कैटलॉग को संभाल सकता है, जिसमें अधिकांश मामलों को शामिल किया जा सकता है।

f = StringIO("<!ELEMENT b EMPTY>") 
dtd = etree.DTD(f) 
dtd = etree.DTD(external_id = "-//OASIS//DTD DocBook XML V4.2//EN") 
0

यह है कि lxml लगता है इस libxml2 सुविधा का खुलासा नहीं करता grepping स्रोत केवल त्रुटि से निपटने के लिए कुछ #defines जाता:

C:\Dev>grep -ir --include=*.px[id] catalog lxml-2.1.1/src | sed -r "s/\s+/ /g" 
lxml-2.1.1/src/lxml/dtd.pxi: catalog. 
lxml-2.1.1/src/lxml/xmlerror.pxd: XML_FROM_CATALOG = 20 # The Catalog module 
lxml-2.1.1/src/lxml/xmlerror.pxd: XML_WAR_CATALOG_PI = 93 # 93 
lxml-2.1.1/src/lxml/xmlerror.pxd: XML_CATALOG_MISSING_ATTR = 1650 
lxml-2.1.1/src/lxml/xmlerror.pxd: XML_CATALOG_ENTRY_BROKEN = 1651 # 1651 
lxml-2.1.1/src/lxml/xmlerror.pxd: XML_CATALOG_PREFER_VALUE = 1652 # 1652 
lxml-2.1.1/src/lxml/xmlerror.pxd: XML_CATALOG_NOT_CATALOG = 1653 # 1653 
lxml-2.1.1/src/lxml/xmlerror.pxd: XML_CATALOG_RECURSION = 1654 # 1654 
lxml-2.1.1/src/lxml/xmlerror.pxi:CATALOG=20 
lxml-2.1.1/src/lxml/xmlerror.pxi:WAR_CATALOG_PI=93 
lxml-2.1.1/src/lxml/xmlerror.pxi:CATALOG_MISSING_ATTR=1650 
lxml-2.1.1/src/lxml/xmlerror.pxi:CATALOG_ENTRY_BROKEN=1651 
lxml-2.1.1/src/lxml/xmlerror.pxi:CATALOG_PREFER_VALUE=1652 
lxml-2.1.1/src/lxml/xmlerror.pxi:CATALOG_NOT_CATALOG=1653 
lxml-2.1.1/src/lxml/xmlerror.pxi:CATALOG_RECURSION=1654 
catalog implementation in libxml2 page से

यह संभव लगता है कि 'पारदर्शी'/etc/xml/catalog में संस्थापन के माध्यम से हैंडलिंग अभी भी lxml में काम कर सकता है, लेकिन यदि आपको उससे अधिक की आवश्यकता है तो आप हमेशा lxml को छोड़ सकते हैं और डिफ़ॉल्ट पायथन बाइंडिंग का उपयोग कर सकते हैं, जो कैटलॉग फ़ंक्शंस का पर्दाफाश करते हैं।

6

आप XML_CATALOG_FILES वातावरण चर को सूची में जोड़ सकते हैं:

os.environ['XML_CATALOG_FILES'] = 'file:///to/my/catalog.xml' 

this thread देखें। ध्यान दें कि XML_CATALOG_FILES में प्रविष्टियां स्थान से अलग यूआरएल हैं। पथ पथ से यूआरएल उत्पन्न करने के लिए आप पाइथन के pathname2url और urljoin (file: के साथ) का उपयोग कर सकते हैं।

संबंधित मुद्दे