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>
谁能帮我理解为什么我无法从此 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>