Wie kann ich mit BeautifulSoup auf Namespace-XML-Elemente zugreifen?

8

Ich habe ein XML-Dokument, das sich so liest:

%Vor%

Meine Frage ist, wie kann ich mit einer Bibliothek wie BeautifulSoup in Python auf sie zugreifen?

xmlDom.web ["Web"]. Insgesamt? funktioniert nicht?

    
demos 17.06.2010, 04:40
quelle

3 Antworten

8

BeautifulSoup ist per se keine DOM-Bibliothek (es implementiert keine DOM-APIs). Um die Sache noch komplizierter zu machen, verwenden Sie Namespaces in diesem XML-Fragment. Um dieses bestimmte XML-Element zu analysieren, verwenden Sie BeautifulSoup wie folgt:

%Vor%

Wenn Sie keine Namespaces verwenden, könnte der Code wie folgt aussehen:

%Vor%

Der Schlüssel hier ist, dass BeautifulSoup nichts über Namespaces weiß (oder interessiert). Daher wird web:Web wie ein web:web -Tag behandelt und nicht als Web -Tag, das zum Namensraum web gehört. Während BeautifulSoup dem XML-Elementwörterbuch web:web hinzufügt, erkennt die Python-Syntax web:web nicht als einzelnen Bezeichner.

Sie können mehr darüber erfahren, indem Sie die Dokumentation lesen.

    
Craig Trader 17.06.2010, 05:06
quelle
6

Das ist eine alte Frage, aber jemand weiß das nicht zumindest BeautifulSoup 4 Behandelt Namespaces gut, wenn Sie 'xml' als zweites Argument an den Konstruktor übergeben:

%Vor%     
Suzana_K 22.02.2016 21:22
quelle
0

Sie sollten Ihren Namespace explizit im root-Element definieren, indem Sie xmlns:prefix="URI" syntax ( Beispiele hier verwenden), und dann greifen Sie über prefix:tag von BeautifulSoup auf Ihr Attribut zu. Denken Sie daran, was Sie auch explizit definieren sollten, wie BeautifulSoup Ihr ​​Dokument verarbeiten soll, in diesem Fall:

  

xml = BeautifulSoup (xml_content, 'xml')

    
inoks 01.06.2016 13:47
quelle