如何使用R的xml2包将列表转换为自定义结构的XML文件
回答
xml2的as_xml_document对嵌套列表的默认解析规则比较简单,遇到原子向量会直接取首个元素作为节点文本,不会自动生成多层子节点,也不支持灵活自定义标签和属性,因此这种多层嵌套的自定义XML更适合通过手动遍历列表生成节点实现,可控性更高。
完整实现代码如下:
# 加载依赖包 library(xml2) # 原始数据列表 r_list <- list( person1 = list(starts = letters[1:3], ends = letters[4:6]), person2 = list(starts = LETTERS[1:4], ends = LETTERS[5:8]) ) # 创建根节点 new_xml <- xml_new_root(.value = "category", name = "personList") # 遍历所有人员数据 for (person_name in names(r_list)) { # 生成pers标签,添加name属性 pers_node <- xml_add_child(new_xml, "pers", name = person_name) # 遍历当前人员的starts、ends字段 for (field_name in names(r_list[[person_name]])) { # 生成对应字段标签 field_node <- xml_add_child(pers_node, field_name) # 遍历字段下所有值,生成value子标签 for (val in r_list[[person_name]][[field_name]]) { xml_add_child(field_node, "value", val) } } } # 打印查看生成的XML print(new_xml, options = "format") # 如需导出为本地XML文件,执行以下代码即可,format参数会自动添加缩进优化可读性 # write_xml(new_xml, "person_list.xml", options = "format")
运行代码后生成的XML结构和你预期的完全一致。
内容的提问来源于stack exchange,提问作者symduk
相关产品推荐
相关产品推荐

