码迷,mamicode.com
首页 > 编程语言 > 详细

使用R语言将XML转换为CSV

时间:2017-05-11 11:30:27      阅读:139      评论:0      收藏:0      [点我收藏+]

标签:dmi   sed   method   str   dir   初始化   func   data   splay   

这里使用的xml文件为CASOS提供的数据集company.xml

首先分析xml文件,截取一段xml代码

技术分享
 1 <DynamicNetwork>    
 2 <MetaNetwork>        
 3 <nodes>            
 4 <nodeclass type="agent" id="agent">                
 5 <node id="LDR" title="Project Manager" />                
 6 <node id="Mgr1" title="Art Director" />                
 7 </nodeclass>                     
 8 <nodeclass type="task" id="task">                
 9 <node id="T1" title="Project Management" />                
10 <node id="T2" title="Administration" />                       
11 </nodeclass>        
12 </nodes>        
13 <networks>            
14 <network sourceType="agent" targetType="agent" id="agent x agent">                
15 <link source="LDR" target="Mgr1" type="double" value="1.0000" />                
16 <link source="LDR" target="Mgr2" type="double" value="1.0000" />                
17 </network>           
18 </DynamicNetwork>    
19 </MetaNetwork>    
View Code

可以看到,在根节点底下有nodes和network两大类,需要提取的是在nodes这个节点下id和title的属性值,network节点下source和target的值,确定需要用到的组成csv文件的属性后,开始对xml文件进行处理。

①首先在R中加载xml包,读取xml文件

# Load the package required to read XML files.
library("XML");

# Also load the other required package.
library("methods");

# Give the input file name to the function.
xmlfile <- xmlParse(file="company.xml")

②找到根节点,确定所需要的属性值在哪个节点下

#找到根节点
xmltop = xmlRoot(xmlfile) 
# 得到id=agent类的node目录
#xmltop[[1]][[1]][[1]]
# 得到id=knowledge类的node目录
#xmltop[[1]][[1]][[2]]
# 得到id=task类的node目录
#xmltop[[1]][[1]][[3]]
#得到id=agent x agent类的network目录
#xmltop[[1]][[2]][[1]]
#得到id=agent x knowledge类的network目录
#xmltop[[1]][[2]][[2]]
#得到id=agent x task类的network目录
#xmltop[[1]][[2]][[3]]

 ③初始化一个向量,存储id的值,在最后将得到的几个向量组成一个数据框datafram对构造getNode函数,获得node的id属性值

由于没有找到R中相关的函数,所以自己写了一个repeat循环

getNodeId <- function(index){
  #初始化向量nodes_id_temp,存储当前参数下获得的节点的id值
  nodes_id_temp <- vector()
  #初始化i
  i<-1
  #获得当前节点总数
  n <- xmlSize(xmltop[[1]][[1]][[index]]) 
  repeat{
    temp=xmlGetAttr(xmltop[[1]][[1]][[index]][[i]],name="id") 
    nodes_id_temp[i] <- temp
    #print(nodes_id_temp[i])
    i<-i+1
    if (i > n)
      break;  
  }
  nodes_id <<- c(nodes_id,nodes_id_temp)
}

  

  

使用R语言将XML转换为CSV

标签:dmi   sed   method   str   dir   初始化   func   data   splay   

原文地址:http://www.cnblogs.com/franose/p/6839505.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!