Test, wenn Kinder tag existiert in beautifulsoup
ich habe eine XML-Datei mit einer definierten Struktur, aber unterschiedlicher Anzahl von tags, wie
file1.xml:
<document>
<subDoc>
<id>1</id>
<myId>1</myId>
</subDoc>
</document>
file2.xml:
<document>
<subDoc>
<id>2</id>
</subDoc>
</document>
Jetzt möchte ich überprüfen, wenn der tag myId
beendet. Also habe ich Folgendes gemacht:
data = open("file1.xml",'r').read()
xml = BeautifulSoup(data)
hasAttrBs = xml.document.subdoc.has_attr('myID')
hasAttrPy = hasattr(xml.document.subdoc,'myID')
hasType = type(xml.document.subdoc.myid)
Das Ergebnis ist für
file1.xml:
hasAttrBs -> False
hasAttrPy -> True
hasType -> <class 'bs4.element.Tag'>
file2.xml:
hasAttrBs -> False
hasAttrPy -> True
hasType -> <type 'NoneType'>
Okay, <myId>
ist nicht ein Attribut des <subdoc>
.
Aber wie kann ich testen, ob ein sub-tag existiert?
//Edit: By the way: ich bin nicht wirklich mögen, zu iterieren durch die ganze subdoc, denn das wird sehr langsam sein. Hoffe ich finde einen Weg wo kann ich die direkte Adresse/bitten, dass element.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Wenn Sie nicht wissen, die Struktur des XML-doc, können Sie die
.find()
Methode der Suppe. So etwas wie dieses:Wenn Sie wissen, dass die Struktur, können Sie das gewünschte element durch den Zugriff auf den tag-Namen als Attribut, wie dies
xml.document.subdoc.myid
. Also das ganze würde wie folgt Aussehen:Drucke
find()
sucht Sie durch das Dokument, richtig? Aber ich weiß, dass die position des Tags Einblick auf die xml-Struktur (falls vorhanden). So ist es keine einfache Möglichkeit, direkt die Adresse eines Elements oder überprüfen, ob das element vorhanden ist?Hier ist ein Beispiel, um zu überprüfen, ob die h2-Tags besteht in einer Instagram-URL. Hoffe, Sie finden es nützlich:
has_attr(key)
statt, wiealt_image_text = [tag["alt"] for tag in images if tag.has_attr("alt")]
. Beachten Sie, dass tag.src scheint immer zurück Keine.können Sie handhaben es so: