我正在尝试从具有许多子项的 SOAP 文件(XML 格式)中提取数据。
XML_find_all 是一个从复杂结构中获取数据的好函数。但是,它无法返回缺失值。
这是一个简单的例子:
x <- read_xml("<Customers> <Customer> <ID> 01 </ID> <Name> Bla </Name> </Customer> <Customer> <ID> 02 </ID> </Customer> </Customers>")
xml_find_all(x, ".//ID")
[1] 01 [2] 02
xml_find_all(x, ".//Name")
[1] 布拉
如何获得 NA 或可以告诉我哪些数据丢失的信息?
最后,我想建立一个数据框架。请记住这只是一个简单的例子。真实数据有 4000 个“客户”和 100 个属性。
假设每个客户都有一个 ID,您可以从那里开始并使用
xml_find_first()
查找 Name
节点之后的第一个兄弟 ID
-节点...如果没有,该函数将返回 NA
。
# get all nodes with ID
ID.nodes <- xml_find_all(x, ".//ID")
# assuming Name comes after ID (if actually present)
# get following sibling Name node
Name.nodes <- xml_find_first(ID.nodes, "./following-sibling::Name")
结果
ID.nodes |> xml_text()
# [1] " 01 " " 02 "
Name.nodes |> xml_text()
# [1] " Bla " NA