有人可以帮我理解为什么我无法从这个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()
答案 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>