2

我正在尝试在 xbrl 文件中查找特定标签。我最初尝试使用 python-xbrl 包,但这并不是我想要的,所以我的代码基于包中可用的代码。

这是我感兴趣的 xbrl 部分

<us-gaap:LiabilitiesCurrent contextRef="eol_PE2035----1510-Q0008_STD_0_20150627_0" unitRef="iso4217_USD" decimals="-6" id="id_5025426_6FEF05CB-B19C-4D84-AAF1-79B431731049_1_24">65285000000</us-gaap:LiabilitiesCurrent>
<us-gaap:Liabilities contextRef="eol_PE2035----1510-Q0008_STD_0_20150627_0" unitRef="iso4217_USD" decimals="-6" id="id_5025426_6FEF05CB-B19C-4D84-AAF1-79B431731049_1_28">147474000000</us-gaap:Liabilities>

这是代码

python-xbrl包基于beautifulsoup4和其他几个包。

liabilities = xbrl.find_all(name=re.compile("(us-gaap:Liabilities)",
                          re.IGNORECASE | re.MULTILINE))

我得到 的价值us-gaap:LiabilitiesCurrent,但我想要 的价值us-gaap:Liabilities。现在,一旦找到匹配项,就将其存储。但在许多情况下,由于 xbrl 中的标记格式,它的匹配错误。我相信我需要更改re.compile()零件以使其正常工作。

4

2 回答 2

2

对于使用这种方法来解析 XBRL(或者实际上,任何带有名称空间的 XML),我会非常谨慎。“us-gaap:Liabilities”是一个 QName,由前缀(“us-gaap”)和本地名称(“Liabilities”)组成。前缀只是完整命名空间 URI 的简写,例如“ http://fasb.org/us-gaap/2015-01-31 ”,它由命名空间声明定义,通常位于文档顶部。如果您查看文档的顶部,您会看到如下内容:

xmlns:us-gaap="http://fasb.org/us-gaap/2015-01-31"

这意味着在本文档的范围内,“us-gaap”是指完整的命名空间 URI。

XML 创建者可以自由使用他们想要的任何前缀,因此无法保证在您遇到的所有文档中该元素实际上都会被称为“us-gaap:Liabilities”。

beautifulsoup4 对命名空间的支持非常有限,因此我不建议将其作为构建 XBRL 处理器的起点。可能值得看看 Arelle 项目,它是一个完整的 XBRL 处理器,它可以更轻松地完成其他任务,例如查找与分类中的事实相关的标签和其他信息。

于 2015-11-27T09:43:20.597 回答
1

尝试$在末尾加上美元符号,以表明不匹配美元符号后面的任何其他内容:

liabilities = xbrl.find_all(name=re.compile("(us-gaap:Liabilities$)",
                          re.IGNORECASE | re.MULTILINE))
于 2015-11-24T21:14:06.520 回答