Ho un file XML con una struttura definita, ma diverso numero di tag, comeprova se tag bambini esiste in BeautifulSoup
file1.xml:
<document>
<subDoc>
<id>1</id>
<myId>1</myId>
</subDoc>
</document>
file2.xml:
<document>
<subDoc>
<id>2</id>
</subDoc>
</document>
Ora mi piace controllare, se il tag myId
esce. Così ho fatto la seguente:
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)
Il risultato è per file1.xml:
hasAttrBs -> False
hasAttrPy -> True
hasType -> <class 'bs4.element.Tag'>
file2.xml:
hasAttrBs -> False
hasAttrPy -> True
hasType -> <type 'NoneType'>
Okay, <myId>
non è un attributo di <subdoc>
.
Ma come posso testare, se esiste un tag secondario?
// Modifica: A proposito: non mi piace molto iterare attraverso l'intero subdoc, perché sarà molto lento. Spero di trovare un modo in cui posso indirizzare l'indirizzo/chiedere quell'elemento.
... ma 'find()' ricerca attraverso il documento, giusto? Ma, conosco la posizione del tag insight l'albero xml (se esiste). Quindi non esiste un modo semplice per indirizzare direttamente un elemento o controllare se quell'elemento esiste? –
Oh ok, mi dispiace di aver frainteso la prima volta. Ho aggiornato la mia risposta. – wpercy
Oh, capisco ... "Mantenerlo semplice" a volte è il modo migliore. Grazie per aprire gli occhi ... –