R xml2从xbrl文件中提取元素

R xml2 extract element from xbrl file

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

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

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()    

处理 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>