Ved hjelp av en XML-katalog med Pythons LXML?

stemmer
7

Er det en måte, da jeg analysere et XML-dokument ved hjelp LXML, å validere at dokumentet mot sin DTD med et eksternt katalogfilen? Jeg må være i stand til å arbeide de faste attributter definert i et dokument DTD.

Publisert på 15/08/2008 klokken 18:42
kilden bruker
På andre språk...                            


3 svar

stemmer
6

Du kan legge til katalogen til XML_CATALOG_FILESmiljøvariabelen:

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

Se denne tråden . Vær oppmerksom på at oppføringer i XML_CATALOG_FILESer plass atskilt nettadresser. Du kan bruke Pythons pathname2urlog urljoin(med file:) for å generere URL fra en banenavn.

Svarte 05/12/2011 kl. 20:54
kilden bruker

stemmer
1

Kan du gi et eksempel? Ifølge LXML validerings docs , kan LXML håndtere DTD-validering (spesifisert i XML-doc eller eksternt i kode) og systemkatalogene, som dekker de fleste tilfellene jeg kan tenke på.

f = StringIO("<!ELEMENT b EMPTY>")
dtd = etree.DTD(f)
dtd = etree.DTD(external_id = "-//OASIS//DTD DocBook XML V4.2//EN")
Svarte 16/08/2008 kl. 07:57
kilden bruker

stemmer
0

Det virker som LXML ikke utsetter dette libxml2 funksjonen, grepping kilden bare dukker opp noen #defines for feilhåndtering:

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

Fra katalogen implementering i libxml2 side synes det mulig at 'gjennomsiktig' håndtering gjennom installasjon i / etc / xml / Katalog fortsatt kan fungere i LXML, men hvis du trenger mer enn at du alltid kan forlate LXML og bruke standard Python-bindingene, som utsettes katalogfunksjonene.

Svarte 30/08/2008 kl. 18:10
kilden bruker

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more