这里使用的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>
可以看到,在根节点底下有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) }
时间: 2024-10-11 01:11:14