2015-02-11 32 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