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.
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:
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')
Tags und Links python xml xml-parsing beautifulsoup xml-namespaces