LearningR-XML
因為要讀取一個XML格式的數據,學習整理XML包。
1.XML包
1.1. 載入XML文件
有兩種方法:
通過函數xmlTreeParse("file.xml")載入xml文件,如果不加入參數,將獲得關于這個xml文件的所有信息。所以,這個函數通常配合xmlRoot()使用,比如xmlRoot(xmlTreeParse("file.xml"))以得到xml主體文件。
通過函數xmlTreeParse("file.xml", useInternalNodes = TRUE)來得到加入首行的xml文件主體
1.2. 獲取特定的節點
詳細XPath語言見XPath 語法
使用函數getNodeSet(doc, XPath)
XPath的常見用法:
獲取第一個son元素
/root/son[1]
獲取最后一個son元素
/root/son[last()]
獲取前兩個son元素
/root/son[position() < 3]
獲取任意son2元素
//son2
獲取任意son2的age屬性
//son2[@age]
獲取任意son2的age屬性等于18的元素
//son2[@age=18]
獲取root下所有元素
/root/*
獲取所有帶屬性的son元素
//son[@*]
節點相關函數
class(xmltop) #查看類
xmlName(node):查看根目錄名。
node[[1]]:查看第一個子目錄
node[1]]:查看第一個子目錄的第二個節點
xmlSize(node):該節點下字節點數量。
xmlAttrs(node):該節點屬性。
xmlGetAttr(node, attr):該節點某一屬性。
xmlValue(node):該節點值。
xmlChildren(node):該節點下的子節點。
1.3 xmlSApply和xmlApply
讀取節點的值
讀取節點的屬性值
1.4 xml格式轉dataframe
book <- getNodeSet(d, "//book") mybook <- sapply(book,xmlValue)#第一種方式,直接用xmlToDataFrame()函數 xmlToDataFrame(d) #由于book[4]不規范,導致轉化失敗 xmlToDataFrame(xmlChildren(d)[["book"]]) xmlToDataFrame(getNodeSet(d, "//book[1]")) xmlToDataFrame(nodes = getNodeSet(d, "//book/title"))#第二種方式,數據格式處理專用包plyr library("plyr") #先轉成list,再轉dataframe MyBooks <- ldply(xmlToList(d), data.frame) MyBooks <- ldply(xmlToList(getNodeSet(d, "//book")), data.frame)#第三種方式,讀取單個值后組合為dataframe author <- xpathSApply(d, "//book/author", xmlValue) #對第四個book的author值做特殊處理 author4 <- xpathSApply(d, "//book[4]/author", xmlValue) author4 <- paste(author4, collapse = ", ") author <- c(author[1:3],author4) MyBooks <- data.frame(category=sapply(xmlChildren(d), xmlGetAttr, "category"),title=xpathSApply(d, "//book/title", xmlValue),author,year=xpathSApply(d, "//book/year", xmlValue),price=xpathSApply(d, "//book/price", xmlValue))總結
以上是生活随笔為你收集整理的LearningR-XML的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 怎么能打开AOPR的日志文件
- 下一篇: 似然估计中为什么要取对数以GMM为例