python - BeaitifulSoup 无法读取所有命名空间

标签 python xml beautifulsoup namespaces xbrl

我有一个 XBRL 文档,它应该是一个 XML 文档。

我正在尝试提取按命名空间分组的不同标签。虽然代码似乎适用于某些命名空间 (us-gaap),但它似乎无法用于其他命名空间 (xbrli)。但是,在 xml 文件中有很多类型为 * < xbrli: ... >* 的标签

代码:

from bs4 import BeautifulSoup

with open('test.xml', 'r') as fp:
    raw_text = fp.read()

soup = BeautifulSoup(raw_text, 'xml')

print( len(soup.find_all(lambda tag: tag.prefix == 'us-gaap')) ) # print 941
print( len(soup.find_all(lambda tag: tag.prefix == 'xbrli')) ) # print 0

您可以找到 test.xml file here .

最佳答案

你能试试这个代码吗(使用 CSS 选择器?)。使用您的代码,我有时会得到 1268 的 xbrli 标签,有时会得到 0(在 bs4==4.4.1 的旧版本上测试)。另外,您使用哪个版本的 BeautifulSoup?

from bs4 import BeautifulSoup, __version__

soup = BeautifulSoup(open('data.txt', 'r').read(), 'xml')

print('xbrli:* tags =', len(soup.select('xbrli|*')))
print('us-gaap:* tags =', len(soup.select('us-gaap|*')))

print('Version of bs4:', __version__)

打印:
xbrli:* tags = 1268
us-gaap:* tags = 941
Version of bs4: 4.8.1

关于python - BeaitifulSoup 无法读取所有命名空间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59470999/

相关文章:

python - beautifulsoup 无法正确解析 xml 标签,但 lxml 是

javascript - 使用 BeautifulSoup 捕获 JavaScript 警报文本

python - 使用 Scikit Learn 进行部分依赖绘图时出现 ValueError

python - 安全错误: Failed to establish secure connection to 'EOF occurred in violation of protocol (_ssl.c:841)'

python - 使用同一模型创建两个不同的表

java - 无法解析 javax.xml.xquery.XQException

python - 删除另一个标签内的标签 beautifulsoup

python - Pandas :FutureWarning:将喜欢的列表传递给 .loc 或 []

java - 如何使用导入另一个模式文件的模式文件验证 XML?

sql - 我有一个 XML 脚本,如何在 Xpath 中编写查询?