2016-02-09 2 views
0

Я генерации файла XML с R, используя следующий код ..Создание XML с R

# R 
prefix.xml <- "<reports> 
    <report type='standard'> 
    <data> xxx </data> 
    <data> xxx </data> 
    <data> xxx </data> 
    </reports>" 

# dummy data.frame 
df <- data.frame("xxx","yyy") 

# buid XML Tree 
xml <- xmlTree() 
xml$addTag("report", close=FALSE, attrs=c(type="enhanced")) 
xml$addTag("pages", close=FALSE) 
for (i in 1:nrow(df)) { 
    xml$addTag("page", close=FALSE) 
    for (j in names(df)) { 
    xml$addTag(j, df[i, j]) 
    } 
    xml$closeTag() 
} 
xml$closeTag() 
xml$closeTag() 

# view XML generated 
cat(saveXML(xml, prefix = prefix.xml)) 

# <reports> 
# <report type='standard'> 
#  <data> xxx </data> 
#  <data> xxx </data> 
#  <data> xxx </data> 
# </report> 
# <report type="enhanced"> 
# <pages> 
#  <page> 
#  <X.xxx.>xxx</X.xxx.> 
#  <X.yyy.>yyy</X.yyy.> 
#  </page> 
# </pages> 
# </report> 

Это создает некоторые XML Thats действительно близко к тому, что я ищу. Однако, поскольку я определяю сложный префикс, я оставляю открытые теги XML. Если вы посмотрите на этот пример, легко увидеть, что мне нужно закрыть тег «reports». Как добавить закрытый тег XML к этому объекту xml в R?

ответ

2

Использование пакета XML, рассмотреть возможность добавления узлов в prefix.xml с помощью newXMLNode():

library(XML) 

# XML STRING 
prefix.xml <- "<reports> 
        <report type='standard'> 
        <data> xxx </data> 
        <data> xxx </data> 
        <data> xxx </data> 
        </report>  
       </reports>" 

# DUMMY DATA FRAME 
df <- data.frame("xxx","yyy") 

# BUILD XML TREE 
doc = xmlTreeParse(prefix.xml, useInternalNodes = T)  # PARSE STRING 
root = xmlRoot(doc)          # FIND ROOT 

reportNode = newXMLNode("report", parent=root)   # ADD TO ROOT 
xmlAttrs(reportNode) = c(type = "enhanced")    # ADD ATTRIBUTE 
pagesNode = newXMLNode("pages", parent=reportNode)  # ADD TO REPORT 

for (i in 1:nrow(df)){ 
    pageNode = newXMLNode("page", parent=pagesNode)  # ADD PAGE FOR EACH RECORD 
    for (j in 1:nrow(df)){ 
    newXMLNode("X.xxx.", df$X.xxx.[i], parent=pageNode) # ADD COL/ROW VALUE 
    newXMLNode("X.yyy.", df$X.yyy.[i], parent=pageNode) # ADD COL/ROW VALUE 
    } 
} 

# VIEW XML 
print(doc) 

# SAVE XML TO FILE 
saveXML(doc, file="OutputFile.xml") 

#<?xml version="1.0"?> 
#<reports> 
# <report type="standard"> 
# <data> xxx </data> 
# <data> xxx </data> 
# <data> xxx </data> 
# </report> 
# <report type="enhanced"> 
# <pages> 
#  <page> 
#  <X.xxx.>xxx</X.xxx.> 
#  <X.yyy.>yyy</X.yyy.> 
#  </page> 
# </pages> 
# </report> 
#</reports> 
+0

большое решение, спасибо! – Nodedeveloper101