Ich habe folgende XML-Quelle.Python XML-Parser erhält nicht den gesamten Text
<a>
<b>
first
</b>
second
</a>
Ich versuche es mit Python zu analysieren wie firstsecond
den Text aus und verbinden den ganzen Text zu einer Zeichenfolge zu erhalten. Dazu habe ich folgendes Skript
import xml.etree.ElementTree as ET
top = ET.fromstring(myXml)
for a in top.iter('a'):
s = ''
if a.text:
s += a.text
else:
for b in a.iter('b'):
if b.text:
s += b.text
print s
Aber das Skript druckt nur das erste Element first
. Der zweite scheint irgendwie verloren zu gehen. Es funktioniert, wenn ich beide Strings in <a></a>
oder beide in <b></b>
habe.
<a>
firstsecond
</a>
Drucke firstsecond
<a>
<b>
first
</b>
<b>
second
</b>
</a>
Drucke firstsecond
Fehle ich etwas den zweiten String zu erhalten, wenn seine in der gleichen <a></a>
als <b></b>
? Oder ist das mit etree einfach nicht möglich und ich muss es neu verpacken? Das XML wird angegeben, ich kann die Quelle daher nicht ändern.
Danke für jede Hilfe.
danke, das funktioniert. Aber ich habe gerade die Tostring-Funktion gefunden, um es einfacher zu machen, dann bin ich nicht davon abhängig, ob es vor oder nach dem Kind-Element ist. –
@Memnon Ja, das ist eine Hilfsfunktion, die den gesamten Text und Schwanz sammelt. Aber die meisten XML-Dokumente sehen wie mein schön formatiertes Beispiel oben aus, wo du den Schwanz nicht haben willst, weshalb das Konzept existiert. –
Ich würde absolut ein schön formatiertes XML bevorzugen, aber so bekomme ich es. Ich dachte auch darüber nach, es vor dem Parsen neu zu formatieren, aber das ist auch nervig. –