我有一个带有嵌套标签的XML文件:
<tag1>
<tag2>text0</tag2>
text1
<tag2>text2</tag2>
</tag1>
<tag2>text3</tag2>
text4
<tag1>
<tag2>text5</tag2>
</tag1>
我希望获取所有tag2
的所有内容,但前提是它们包含在tag1
中。因此,在此示例中:text0
,text2
和text5
。而不是text1
。
我目前正在双循环中执行此操作。但是文件将有多个级别,我想避免嵌套许多for循环。
这是我的代码:
tag1entries = soup.find_all('tag1')
for tag1entry in tag1entries:
tag2entries = tag1entry.find_all('tag2')
for tag2entry in tag2entries:
do_something(tag2entry.contents)
有没有人知道更好的方法?
答案 0 :(得分:2)
例如,您可以使用CSS selector选择tag2
的直接子女tag1
:
tag2entries = soup.select('tag1 > tag2')
或者,在tag2
内的任意位置选择tag1
:
tag2entries = soup.select('tag1 tag2')
答案 1 :(得分:0)
您可以使用列表理解:
entry_list = [entry.text for entry in soup.find_all('tag2') if entry.parent.name == 'tag1']
导致:
['text0', 'text2', 'text5']