为什么会出现此错误:removeNode目前仅适用于内部节点

时间:2016-03-10 14:09:12

标签: xml r

我正在编写一个相当简单的R脚本,它将生成一些XML。我正在使用XML包并做这样的事情:

doc <- newXMLDoc()
root = newXMLNode("Root", namespaceDefinitions=c("xsi"="http://www.w3.org/2001/XMLSchema-instance"), doc=doc)
newXMLNode("Foo", sample(g_IDS, 1), parent=root) #g_IDS is a vector with some random guids

然后很多:

bar = newXMLNode("bar", parent = root)

添加了更多节点,bar也获得了一些子节点。 newXMLNode有很多来电,我不是删除任何节点(至少不是故意的)。

最后,我将所有内容写入如下文件:

cat(saveXML(doc, file = "out.xml"))

这样可行,但我收到50条警告说:

在removeNodes.list(kids)中:removeNode仅适用于当前的内部节点

我无法为我的生活找出原因。有谁知道吗?

1 个答案:

答案 0 :(得分:0)

最近遇到这种情况,修复方法是正确订阅任何名为的列表元素。可能g_IDS维护其元素的名称,因此请考虑获取返回的sample()的第一个元素:newXMLNode("Foo", sample(g_IDS, 1)[[1]], parent=root)

演示:

g_IDs <- setNames(as.list(seq(1,50,1)), paste0("ID", seq(1,50,1)))
# $ID1
# [1] 1

# $ID2
# [1] 2

# $ID3
# [1] 3
...

doc <- newXMLDoc()
root = newXMLNode("Root", 
                  namespaceDefinitions=c("xsi"="http://www.w3.org/2001/XMLSchema-instance"), 
                  doc=doc)
newXMLNode("Foo", sample(g_IDs, 1), parent=root)
# <Foo>1</Foo> 
# Warning message:
# In removeNodes.list(kids) :
#  removeNode only works on internal nodes at present

doc <- newXMLDoc()
root = newXMLNode("Root", 
                  namespaceDefinitions=c("xsi"="http://www.w3.org/2001/XMLSchema-instance"), 
                  doc=doc)
newXMLNode("Foo", sample(g_IDs, 1)[[1]], parent=root)
# <Foo>4</Foo>