ho il seguente codice XML, che voglio analizzare utilizzando Python ElementTree
:parsing XML con spazio dei nomi in Python via 'ElementTree'
<rdf:RDF xml:base="http://dbpedia.org/ontology/"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:owl="http://www.w3.org/2002/07/owl#"
xmlns:xsd="http://www.w3.org/2001/XMLSchema#"
xmlns:rdfs="http://www.w3.org/2000/01/rdf-schema#"
xmlns="http://dbpedia.org/ontology/">
<owl:Class rdf:about="http://dbpedia.org/ontology/BasketballLeague">
<rdfs:label xml:lang="en">basketball league</rdfs:label>
<rdfs:comment xml:lang="en">
a group of sports teams that compete against each other
in Basketball
</rdfs:comment>
</owl:Class>
</rdf:RDF>
Voglio trovare tutti owl:Class
tag e quindi estrarre il valore di tutti rdfs:label
istanze dentro di loro. Sto usando il seguente codice:
tree = ET.parse("filename")
root = tree.getroot()
root.findall('owl:Class')
A causa dello spazio dei nomi, ricevo il seguente errore.
SyntaxError: prefix 'owl' not found in prefix map
ho provato leggendo il documento in http://effbot.org/zone/element-namespaces.htm ma non sono ancora in grado di ottenere questo lavoro in quanto il sopra XML ha più spazi dei nomi nidificati.
Gentilmente fammi sapere come modificare il codice per trovare tutti i tag owl:Class
.
Grazie. Soprattutto per la seconda parte, dove puoi dare direttamente lo spazio dei nomi. – Sudar
Grazie. Qualche idea su come posso ottenere lo spazio dei nomi direttamente da XML, senza codificarlo? O come posso ignorarlo? Ho provato findall ('{*} Class') ma non funzionerà nel mio caso. – Kostanos
Dovresti eseguire la scansione dell'albero per gli attributi 'xmlns'; come indicato nella risposta, 'lxml' lo fa per te, il modulo' xml.etree.ElementTree' no. Ma se stai cercando di abbinare un elemento specifico (già codificato), stai anche cercando di abbinare un elemento specifico in uno spazio dei nomi specifico. Lo spazio dei nomi non cambierà più tra i documenti rispetto al nome dell'elemento. Si può anche hardcode con il nome dell'elemento. –