Χρησιμοποιώντας ένα κατάλογο XML με lxml της Python;

ψήφοι
7

Υπάρχει ένας τρόπος, όταν αναλύσει ένα έγγραφο XML χρησιμοποιώντας lxml, για να επικυρώσει το έγγραφο αυτό κατά DTD χρησιμοποιώντας ένα εξωτερικό αρχείο καταλόγου; Θα πρέπει να είναι σε θέση να εργαστούν τα σταθερά χαρακτηριστικά που ορίζονται στο DTD ενός εγγράφου.

Δημοσιεύθηκε 15/08/2008 στις 17:42
πηγή χρήστη
Σε άλλες γλώσσες...                            


3 απαντήσεις

ψήφοι
1

Μπορείτε να μας δώσετε ένα παράδειγμα; Σύμφωνα με τα έγγραφα επικύρωσης lxml , lxml μπορεί να χειριστεί την επικύρωση DTD (που ορίζονται στο έγγραφο XML ή εξωτερικά στον κώδικα) και καταλόγους του συστήματος, το οποίο καλύπτει τις περισσότερες περιπτώσεις μπορώ να σκεφτώ.

f = StringIO("<!ELEMENT b EMPTY>")
dtd = etree.DTD(f)
dtd = etree.DTD(external_id = "-//OASIS//DTD DocBook XML V4.2//EN")
Απαντήθηκε 16/08/2008 στις 06:57
πηγή χρήστη

ψήφοι
0

Φαίνεται ότι lxml δεν εκθέτει αυτή τη libxml2 λειτουργία, την εντολή grep η πηγή γυρίζει μόνο μερικά #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

Από την εφαρμογή κατάλογο με τη σελίδα libxml2 φαίνεται πιθανό ότι η «διαφάνεια» τον χειρισμό μέσω εγκατάστασης στο / etc / xml / κατάλογος μπορεί να εξακολουθούν να εργάζονται στην lxml, αλλά αν χρειάζεστε περισσότερο από αυτό μπορείτε πάντα να εγκαταλείψει lxml και να χρησιμοποιήσετε τις συνδέσεις προεπιλογή python, που κάνουν εκθέτουν τις λειτουργίες καταλόγου.

Απαντήθηκε 30/08/2008 στις 17:10
πηγή χρήστη

ψήφοι
6

Μπορείτε να προσθέσετε τον κατάλογο με την XML_CATALOG_FILESμεταβλητή περιβάλλοντος:

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

Βλέπε αυτό το νήμα . Σημειώστε ότι οι εγγραφές στα XML_CATALOG_FILESαποτελούν χώρο διαχωρισμένες τις διευθύνσεις URL. Μπορείτε να χρησιμοποιήσετε την Python του pathname2urlκαι urljoin(με file:) για να δημιουργήσει τη διεύθυνση URL από μια διαδρομή.

Απαντήθηκε 05/12/2011 στις 18:54
πηγή χρήστη

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