gpt4 book ai didi

python - XML 阅读器似乎忽略了标签层次结构

转载 作者:数据小太阳 更新时间:2023-10-29 02:28:35 24 4
gpt4 key购买 nike

在 XML 文件中,我试图获取在标签层次结构的不同级别多次出现的标签的内容。我正在尝试获取标签最高级别出现的内容,但我的 XML 阅读器(Python 版 BeautifulSoup)一直给我错误的内容。

这是具体问题。这是 XML 文件的一部分(浓缩为我认为相关的部分):

<object>
<name>person</name>
<part>
<name>head</name>
<bndbox>
<xmin>337</xmin>
<ymin>2</ymin>
<xmax>382</xmax>
<ymax>66</ymax>
</bndbox>
</part>
<bndbox>
<xmin>334</xmin>
<ymin>1</ymin>
<xmax>436</xmax>
<ymax>373</ymax>
</bndbox>
</object>

我有兴趣获取 <bndbox> 的内容通过命令在此代码段的末尾标记

box = object.bndbox

但是如果我打印出 box ,我不断得到这个:

<bndbox>
<xmin>337</xmin>
<ymin>2</ymin>
<xmax>382</xmax>
<ymax>66</ymax>
</bndbox>

这对我来说毫无意义。我不断得到的上面的框比我要求的低一个层次,在 <part> 下。标签,所以我应该只能通过

访问这个框
object.part.bndbox

同时

object.bndbox

应该给我唯一一个直接在 object 下的框标记,这是上面代码段中的最后一个框。

最佳答案

@mjsqu 所述在 the comments :

BeautifulSoup returns the first tag matching that name, so object.bbox refers to the first bbox in the XML, regardless of position in the hierarchy.

所以,要获得第二个 <bndbox>标签,或者 <bndbox>这是 <object> 的直接子代标签,你可以使用 recursive=False作为参数。这将只查找当前标签的直接子标签。

xml = '''
<object>
<name>person</name>
<part>
<name>head</name>
<bndbox>
<xmin>337</xmin>
<ymin>2</ymin>
<xmax>382</xmax>
<ymax>66</ymax>
</bndbox>
</part>
<bndbox>
<xmin>334</xmin>
<ymin>1</ymin>
<xmax>436</xmax>
<ymax>373</ymax>
</bndbox>
</object>'''

soup = BeautifulSoup(xml, 'xml')
print(soup.object.find('bndbox', recursive=False))

输出:

<bndbox>
<xmin>334</xmin>
<ymin>1</ymin>
<xmax>436</xmax>
<ymax>373</ymax>
</bndbox>

关于python - XML 阅读器似乎忽略了标签层次结构,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49971317/

24 4 0