mam następujące XML, który chcę analizować przy użyciu Pythona ElementTree
:Przetwarzanie XML z nazw w Pythonie poprzez „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>
chcę znaleźć wszystkie owl:Class
tagi i następnie wyodrębnić wartość wszystkich rdfs:label
przypadkach w nich. Korzystam z następującego kodu:
tree = ET.parse("filename")
root = tree.getroot()
root.findall('owl:Class')
Z powodu przestrzeni nazw otrzymuję następujący błąd.
SyntaxError: prefix 'owl' not found in prefix map
Próbowałem czytania dokumentu w http://effbot.org/zone/element-namespaces.htm ale nadal nie jestem w stanie uzyskać tej pracy, ponieważ powyżej XML ma wiele nazw zagnieżdżonych.
Prosimy o informację, jak zmienić kod, aby znaleźć wszystkie znaczniki owl:Class
.
Dzięki. Zwłaszcza w drugiej części, w której można bezpośrednio nadać przestrzeń nazw. – Sudar
Dziękuję. Masz pomysł, jak uzyskać przestrzeń nazw bezpośrednio z XML-a, bez twardego kodowania? Lub jak mogę to zignorować? Próbowałem findall ("{*} Class"), ale to nie zadziała w moim przypadku. – Kostanos
Musisz samemu przeskanować drzewo w poszukiwaniu atrybutów 'xmlns'; jak stwierdzono w odpowiedzi, 'lxml' robi to za Ciebie, moduł' xml.etree.ElementTree' nie. Ale jeśli próbujesz dopasować określony (już zakodowany) element, to próbujesz także dopasować określony element do określonego obszaru nazw. Ta przestrzeń nazw nie zmieni się między dokumentami tak jak nazwa elementu. Możesz równie dobrze kodować przy użyciu nazwy elementu. –