使用R语言将XML转换为CSV

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了使用R语言将XML转换为CSV相关的知识,希望对你有一定的参考价值。

这里使用的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的主要内容,如果未能解决你的问题,请参考以下文章

在 python 中使用 Argparse 将 xml 转换为 csv

将 XML 转换为 CSV

使用 xml 将 csv 值转换为表行。谁能解释一下下面提到的查询将如何工作

使用 XSLT 将 CSV 文件转换为 XML

使用 Python 将 XML 转换为 CSV

将 CSV 文件转换为 XML