2016-08-31 1 views
2

.csv 파일에서 XML 파일을 만들고 싶습니다..csv에서 XML을 올바르게 만드는 방법은 무엇입니까?

<?xml version="1.0" encoding="UTF-8"?> 
<document> 
    <employee ID="1"> 
    <Name>Steve</Name> 
    <City>Boston</City> 
    <Age>33</Age> 
    </employee> 
    <employee ID="2"> 
    <Name>Michael</Name> 
    <City>Dallas</City> 
    <Age>45</Age> 
    </employee> 
    <employee ID="3"> 
    <Name>John</Name> 
    <City>New York</City> 
    <Age>89</Age> 
    </employee> 
    <employee ID="4"> 
    <Name>Thomas</Name> 
    <City>LA</City> 
    <Age>62</Age> 
    </employee> 
    <employee ID="5"> 
    <Name>Clint</Name> 
    <City>Paris</City> 
    <Age>30</Age> 
    </employee> 
</document> 

내가 시도 무엇 : 내가 원하는 구조를 얻기 위해 약간의 어려움이

library(XML) 

# Some data 
df <- 
    read.csv(textConnection('"ID","Name","City","Age" 
"1","Steve","Boston",33 
"2","Michael","Dallas",45 
"3","John","New York",89 
"4","Thomas","LA",62 
"5","Clint","Paris",30'), 
     as.is=TRUE) 

xml <- xmlTree() 
xml$addTag("document", close=FALSE) 
for (i in 1:nrow(df)) { 
    xml$addTag("employee", close=FALSE) 
    for (j in names(df)) { 
    xml$addTag(j, df[i, j]) 
    } 
    xml$closeTag() 
} 
xml$closeTag() 

원하는대로 거의 보이지만 ID는 같은 라인과 인코딩보다는 employee 아래입니다 헤더에되지 않습니다 :

<?xml version="1.0"?> 

<document> 
    <employee> 
    <ID>1</ID> 
    <Name>Steve</Name> 
    <City>Boston</City> 
    <Age>33</Age> 
    </employee> 
    <employee> 
    <ID>2</ID> 
    <Name>Michael</Name> 
    <City>Dallas</City> 
    <Age>45</Age> 
    </employee> 
    <employee> 
    <ID>3</ID> 
    <Name>John</Name> 
    <City>New York</City> 
    <Age>89</Age> 
    </employee> 
    <employee> 
    <ID>4</ID> 
    <Name>Thomas</Name> 
    <City>LA</City> 
    <Age>62</Age> 
    </employee> 
    <employee> 
    <ID>5</ID> 
    <Name>Clint</Name> 
    <City>Paris</City> 
    <Age>30</Age> 
    </employee> 
</document> 

답변

2

사용 addNode 대신 addTag. 그것들은 동일합니다.

그래서 선호 사항입니다. attrs 인수를 사용하여 ID 특성을 추가 할 수 있습니다. 파일을 저장할 때 인코딩을 추가 할 수 있습니다.

library(XML) 
df <- 
    read.csv(textConnection('"ID","Name","City","Age" 
          "1","Steve","Boston",33 
          "2","Michael","Dallas",45 
          "3","John","New York",89 
          "4","Thomas","LA",62 
          "5","Clint","Paris",30'), 
      as.is=TRUE) 

xml <- xmlTree("document") 
for (i in 1:nrow(df)) { 
    xml$addNode("employee", attrs = c(ID = df[i,"ID"]), close = FALSE) 
    appNames <- names(df)[names(df) != "ID"] 
    for (j in appNames) { 
    xml$addNode(j, df[i, j]) 
    } 
    xml$closeNode() 
} 
xml$closeNode() 
saveXML(xml$doc(), "text.xml", encoding = "UTF-8") 
xmlParse("text.xml") 
<?xml version="1.0" encoding="UTF-8"?> 
<document> 
    <employee ID="1"> 
    <Name>Steve</Name> 
    <City>Boston</City> 
    <Age>33</Age> 
    </employee> 
    <employee ID="2"> 
    <Name>Michael</Name> 
    <City>Dallas</City> 
    <Age>45</Age> 
    </employee> 
    <employee ID="3"> 
    <Name>John</Name> 
    <City>New York</City> 
    <Age>89</Age> 
    </employee> 
    <employee ID="4"> 
    <Name>Thomas</Name> 
    <City>LA</City> 
    <Age>62</Age> 
    </employee> 
    <employee ID="5"> 
    <Name>Clint</Name> 
    <City>Paris</City> 
    <Age>30</Age> 
    </employee> 
</document> 
+0

고마워요! 마지막 질문을해도 될까요? 예를 들어 목록을 사용하여 함수의 성능을 향상시킬 수 있습니까? 나는 거대한'.csv '에 대한 loopen이 오래 걸릴 것이라고 생각한다. – Googme

관련 문제