R中使用XML查找所有函数时如何知道数据是否丢失?

问题描述 投票:0回答:1

我正在尝试从具有许多子项的 SOAP 文件(XML 格式)中提取数据。

XML_find_all 是一个从复杂结构中获取数据的好函数。但是,它无法返回缺失值。

这是一个简单的例子:

与两位客户一起阅读简单的示例文件。一位顾客的名字不见了。

x <- read_xml("<Customers> <Customer> <ID> 01 </ID> <Name> Bla </Name> </Customer> <Customer> <ID> 02 </ID> </Customer> </Customers>")

可以找到两个ID

xml_find_all(x, ".//ID")

[1] 01 [2] 02

仅查找一个名字

xml_find_all(x, ".//Name")

[1] 布拉

如何获得 NA 或可以告诉我哪些数据丢失的信息?

最后,我想建立一个数据框架。请记住这只是一个简单的例子。真实数据有 4000 个“客户”和 100 个属性。

r xml soap xml2
1个回答
0
投票

假设每个客户都有一个 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 
© www.soinside.com 2019 - 2024. All rights reserved.