我正在编写一个相当简单的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仅适用于当前的内部节点
我无法为我的生活找出原因。有谁知道吗?
答案 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>