使用xml2为节点添加子节点遇转义问题求解决方案
解决xml2中添加嵌套子节点时标签被转义的问题
我太懂这种“看起来简单却卡壳”的感觉了——你想用xml2给节点加一个带嵌套标签的子节点,结果xml_add_child(你说的add_new_child应该是指这个?)把<>转义成<和>,完全不是你想要的效果对吧?
问题出在你传递的是带标签的字符串,xml2会把它当成普通文本处理,自然会转义特殊字符。要解决这个,得换个思路:直接创建XML元素节点,而不是传字符串。
给你两种可行的方案:
方案一:分步创建嵌套节点
适合手动构建简单的嵌套结构:
- 先加载你的
test.xml并定位到目标父节点:library(xml2) doc <- read_xml("test.xml") # 替换成你实际的父节点XPath路径 parent_node <- xml_find_first(doc, "//target_parent_node") - 先创建外层的
<whatever>节点:whatever_node <- xml_new_node("whatever") - 给它添加
<other>子节点并设置文本内容:other_node <- xml_new_node("other", text = "hello") xml_add_child(whatever_node, other_node) - 最后把整个
<whatever>节点加到父节点下:xml_add_child(parent_node, whatever_node) - 记得保存修改后的XML:
write_xml(doc, "test.xml")
这样生成的就是你想要的嵌套结构,完全不会有转义问题。
方案二:直接解析XML片段字符串
如果你的嵌套结构比较复杂,或者已经有现成的XML片段字符串,可以先把它解析成节点再添加:
library(xml2) doc <- read_xml("test.xml") parent_node <- xml_find_first(doc, "//target_parent_node") # 你的XML片段字符串 xml_fragment <- "<whatever> <other> hello </other> </whatever>" # 解析成XML节点 fragment_node <- read_xml(xml_fragment) %>% xml_root() # 添加到父节点 xml_add_child(parent_node, fragment_node) # 保存修改 write_xml(doc, "test.xml")
这个方法更灵活,不管片段多复杂,只要是合法的XML,都能直接加进去。
核心逻辑就是:要添加XML元素,就别用文本字符串的方式,直接操作节点对象——xml2是基于节点树的,用节点操作才是正确的打开方式~
内容的提问来源于stack exchange,提问作者cimentadaj
相关产品推荐
相关产品推荐

