【发布时间】:2019-11-09 04:05:14
【问题描述】:
我有一个 XML 元素,看起来像这样:
XML
<page>
<textline id="1">
<text>C</text>
<text>o</text>
<text>n</text>
<text>t</text>
<text>a</text>
<text>k</text>
<text>t</text>
</textline>
<textline id="2">
<text>
</text>
</textline>
<textline id="3">
<text>M</text>
<text>e</text>
</textline>
</page>
我正在尝试all获得<textline>标签only:
with open(path_to_xml_file) as xml_file:
parsed_xml = BeautifulSoup(xml_file, 'xml')
text_lines = parsed_xml.find_all("textline")
但是,text_lines 包括 <textline> 的所有子级 - 这意味着它包括所有 <text></text> 标记。
我似乎在文档中找不到任何解释如何只选择实际标签(而不是任何子、子子等)的内容。
我找到了 recursive=False 选项,它应该只选择 direct 孩子,所以我想我可以将它应用到 page 标签:
text_lines = parsed_xml.find_all("page", recursive=False)
但这会返回一个空列表:[]
预期结果:
<textline id="1"></textline>
<textline id="2"></textline>
<textline id="3"></textline>
【问题讨论】:
-
您的预期结果是什么?如果您不介意生孩子,您可以尝试计算
textline标签。 -
您期望的输出是什么?
-
大家好 - 刚刚用预期的结果更新了我的原始帖子。
-
我认为 BeautifulSoup 无法打开文件 - 它需要带有 html/xml 的文本而不是文件名。或者你必须使用
open()-BeautifulSoup(open('myXMLfile.xml'), 'xml')- 见documentation
标签: python xml python-3.x beautifulsoup