2015-02-11 30 views
0

我有我的C本地存储的XML文件的test.xml:\该取的参数值的学生ID如下传递整列到XML

. 
. 
. 
<input-id>"student" 
     3392966 
     </input-id> 

我有R中包含一串数据帧学生ID值

3392966 
    4064262 
    7319370 
    7115327 
    . 
    . 
    . 

如何将存储在数据集中的整个Student Id值传递到test.xml文件的input-id句柄中?

. 
. 
. 
<input-id>"student" 
     ....All student Id values from the StudentId column from dataframe Test 
     </input-id> 

回答

0

这里是做到这一点的一种方法:

library("XML") 

# test data frame 
Test <- data.frame(StudentId = c(100, 200, 300)) 

# parse XML 
doc <- xmlParseDoc("test.xml") 

# find first <input-id> element 
ns <- getNodeSet(doc, "//input-id")[[1]] 

# adding dataframe column StudentId as new sub-elements 
kids <- lapply(Test$StudentId, function(x) newXMLNode("id", x)) 

addChildren(ns, kids = kids, append = FALSE) 

# save XML 
saveXML(doc, file = "test2.xml") 

在此情况下的ID将是输入id元素的子元素。 如果要添加xml文本节点,请使用newXMLTextNode而不是newXMLNode。

+0

我试图用'Test $ StudentId'中的值替换input-id句柄之间的任何当前退出。我尝试使用newXMLTextNode选项,我得到这个错误....'UseMethod(“addChildren”)中的错误:没有适用于'addChildren'的方法应用于类“c('整数','数字')”调用时:FUN(X [[1L]],...)'执行此行时'lapply(Test $ StudentId,function(x)newXMLNode(“id”,x))'.. – Science11 2015-02-14 21:59:09

+0

适用于我的机器: ) - 我在代码片段中包含了我的测试数据框版本。也许我们的数据输入有差异(其中c(int,num)来自哪里?) – bergant 2015-02-14 23:43:52

+0

:-)它可以工作,如果我手动删除元素' .... '中的所有内容... if ''元素已经包含了一些id,因此代码不会由于某种原因而被替换 – Science11 2015-02-15 00:16:22