R语言xml2包使用xml_add_child添加带属性子节点的问题
正确实现语法
你需要调整参数传入方式,有两种常用写法适配不同场景:
1. 手动直接指定属性
直接将属性作为命名参数传入xml_add_child即可:
library(xml2) my_xml <- read_xml("<fruits><apple/><banana/></fruits>") xml_add_child(.x = my_xml, .value = "coconut", id = "new") my_xml # {xml_document} # <fruits> # [1] <apple/> # [2] <banana/> # [3] <coconut id="new"/>
2. 属性已提前存入命名向量的场景
如果你的属性是提前存在命名向量中的,需要用!!!操作符对向量进行解包后传入:
library(xml2) library(rlang) my_xml <- read_xml("<fruits><apple/><banana/></fruits>") # 提前定义属性向量 attrs <- c(id = "new", weight = "1kg") xml_add_child(.x = my_xml, .value = "coconut", !!!attrs) my_xml # {xml_document} # <fruits> # [1] <apple/> # [2] <banana/> # [3] <coconut id="new" weight="1kg"/>
错误原因说明
你之前的写法是将整个命名向量作为单一位置参数传入函数,xml_add_child会把所有未命名的位置参数识别为节点的文本内容,因此才会把向量值"new"写入<coconut>标签内部。只有当传入的参数本身是独立的命名参数时,才会被函数解析为新增节点的XML属性。
内容的提问来源于stack exchange,提问作者Dubukay
相关产品推荐
相关产品推荐

