0

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

1 回答 1

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>
于 2018-05-07T14:40:01.973 回答