【问题标题】:How can I get namespace information from tag in beautifulsoup4?如何从 beautifulsoup4 中的标签获取命名空间信息?
【发布时间】:2021-05-16 18:13:23
【问题描述】:

我正在尝试解析一些强烈使用名称空间的 xml 文件。现在我正在使用beautifulsoup4,而且大部分情况都很顺利。不幸的是,我遇到了一些数据,其中一些标签可能具有相同的名称,但它们具有不同的命名空间说明符,因此理论上这应该没问题,因为美丽的汤显然在某种程度上具有此信息:

from bs4 import BeautifulSoup

xml = """

<root
xmlns:nsa="http://www.dummynamespacea.com"
xmlns:nsb="http://www.dummynamespaceb.com"
>
<nsa:elem>information</nsa:elem1>
<nsb:elem>more information</nsb:elem2>

</root>

"""

soup = BeautifulSoup(xml, "xml")

print(soup)

<?xml version="1.0" encoding="utf-8"?>
<root xmlns:nsa="http://www.dummynamespacea.com" xmlns:nsb="http://www.dummynamespaceb.com">
<nsa:elem>information</nsa:elem>
<nsb:elem>more information</nsb:elem>
</root>

但是,如果我在迭代元素时打印元素的名称,则该信息不存在:

import re
for element in soup.find_all(re.compile(".*")):
    print(element.name)
root
elem
elem

有没有办法在我迭代它们时获取有关标签命名空间的信息?

【问题讨论】:

    标签: python python-3.x xml beautifulsoup


    【解决方案1】:

    您正在寻找的是.namespaceelement 的'.prefix' 属性:

    for element in soup.find_all(re.compile(".*")):
        print(element.prefix, element.name)
      
    
    None root
    nsa elem
    nsb elem
    

    【讨论】:

    • 真的非常感谢你。出于某种原因,我很难在文档或在线其他任何地方找到它。
    猜你喜欢
    • 1970-01-01
    • 2013-08-21
    • 2019-09-30
    • 1970-01-01
    • 1970-01-01
    • 2017-10-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多