2015-11-24 192 views
1

我在xbrl文件中查找特定的標籤。我最初嘗試使用python-xbrl包,但它不完全是我想要的,所以我將我的代碼基於包中提供的代碼。用python閱讀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> 

XBRL的部分下面是代碼

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()部分才能使其正常工作。

回答

1

末有$美元符號試試吧,表示不匹配任何其他美元符號後面:

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

工作感謝你!出於某種原因,我認爲'$'應該在字符串的開頭,顯然這不起作用。 – AK9309

1

我會如何使用這種方法來解析XBRL(或確實非常謹慎,任何帶有命名空間的XML)。 「us-gaap:負債」是一個QName,由一個前綴(「us-gaap」)和一個本地名稱(「負債」)組成。前綴只是一個完整名稱空間URI的縮寫,例如「http://fasb.org/us-gaap/2015-01-31」,它由名稱空間聲明定義,通常位於文檔的頂部。如果你看一下文件的頂部,你會看到類似這樣的:

的xmlns:美國通用會計準則=「http://fasb.org/us-gaap/2015-01-31」

這意味着在本文的範圍內,「us-gaap」意味着完整的命名空間URI。

XML創建者可以自由使用他們想要的任何前綴,因此不能保證該元素實際上會在所有遇到的文檔中被稱爲「us-gaap:Liabilities」。

beautifulsoup4對命名空間的支持非常有限,所以我不會推薦它作爲構建XBRL處理器的起點。值得一看的是Arelle項目,它是一個完整的XBRL處理器,並且可以更輕鬆地完成其他任務,例如查找與分類中事實相關的標籤和其他信息。