来自xbrl文件的R xml2提取元素

时间:2018-05-07 14:18:35

标签: r xml xbrl xml2

有人可以帮我理解为什么我无法从这个xml文件中提取节点/元素吗?从技术上讲,它是一个xbrl文件,但我希望R xml2库可以正常工作。

读入文件。第3个元素或节点似乎是单位。此代码按预期工作:

library(xml2)
library(tidyverse)


eqr <- read_xml(x = "https://www.sec.gov/Archives/edgar/data/906107/000156459018010687/eqr-20180331.xml")

View(eqr)

xml_child(eqr, 3)

但是,我无法使用此代码:

xml_find_first(eqr, xpath = "unit")

使用此方法搜索其他元素按预期工作:

xml_find_first(eqr, xpath = "us-gaap:OperatingLeasesIncomeStatementLeaseRevenue")
xml_find_first(eqr, xpath = "us-gaap:OperatingLeasesIncomeStatementLeaseRevenue") %>%
 xml_double()    

1 个答案:

答案 0 :(得分:2)

处理XML文件时非常典型的问题,因为文档的默认名称空间用冒号分隔的前缀表示:xmlns="http://www.xbrl.org/2003/instance"

因此,不在本地命名空间中的节点绑定到此默认值,并且任何XPath都应运行用户定义的前缀以将节点映射到该节点。幸运的是,xml2允许这样做,因为xml_find_first维护第三个参数 ns ,它采用命名向量或xml_ns()调用:

# CREATED DOC PREFIX AND INCLUDED IN XPATH
xml_find_first(eqr, xpath = "doc:unit", ns = c(doc="http://www.xbrl.org/2003/instance"))

# {xml_node}
# <unit id="U_shares">
# [1] <measure>shares</measure>

或者,xml2也允许剥离默认名称空间:

xml_find_first(xml_ns_strip(eqr), xpath = "unit")

# {xml_node}
# <unit id="U_shares">
# [1] <measure>shares</measure>