Ich versuche, den gesamten Text in einer bestimmten Spalte in einem bestimmten Teil einer XML-Datei zu erhalten. Zu diesem Zweck benutze ich BeautifulSoup.Verwenden von findAll innerhalb eines bestimmten Tags in BeautifulSoup
Wenn ich BeautifulSoup die FindAll
Funktion verwenden, gibt es die Spalten aus dem bestimmten Teil, wie es sollte, Plus alle passenden Spalten nach diesem Teil, so dass nach dem schließenden Tag.
Zur Veranschaulichung eines Beispiels:
Meine Datei:
<?xml version="1.0" encoding="UTF-8"?>
<doc>
<row>
<entry colname="col2" align="left"><p>stuff</p></entry>
</row>
<body>
<row><!--[1]-->
<entry colname="col1" align="right"><p><id="1"/>1</p></entry>
<entry colname="col2" align="left"><p>I want this part</p></entry>
</row>
<row><!--[2]-->
<entry colname="col1" align="right"><p><id="2"/>2</p></entry>
<entry colname="col2" align="left"><p>I want this part2</p></entry>
</row>
<row>
<othertag>moreStuff</othertag>
</row>
</body>
<row>
<entry colname="col2" align="left"><p>I <b>don't</b> want this part</p></entry>
</row>
</doc>
Mein Skript:
from bs4 import BeautifulSoup as bs
soup = bs(open('test.xml', encoding='utf-8').read(), 'xml')
soup.body.findAll('entry', {'colname': 'col2'})
Edited Skript mit identischem Ausgang:
soup = bs(open('test.xml', encoding='utf-8').read(), 'xml')
part = soup.find('body')
part.findAll('entry', {'colname': 'col2'})
Der Ausgang:
[<entry align="left" colname="col2"><p>I want this part</p></entry>,
<entry align="left" colname="col2"><p>I want this part2</p></entry>,
<entry align="left" colname="col2"><p>I <b>don't</b> want this part</p></entry>]
Wo der letzte Eintrag sollte nicht da sein. Wie behebe ich das?
(Aufgrund der unterschiedlichen Anzahl der richtigen und falschen Einträge in meinem Dateien nur das letzte Element des Arrays Notwasserung ist keine Option)
Finden 'body' zuerst, dann tun Sie Ihre' findAll' drauf? – Cyrbil