XML是一種可擴展標記語言,它被設計用來傳輸和存儲數據。XML是各種應用程式之間進行數據傳輸的最常用的工具。它與Access,Oracle和SQL Server等資料庫不同,資料庫提供了更強有力的數據存儲和分析能力,例如:數據索引、排序、查找、相關一致性等,它僅僅是**存儲數據**。事實上它與其他數... ...
數據解析
XML是一種可擴展標記語言,它被設計用來傳輸和存儲數據。XML是各種應用程式之間進行數據傳輸的最常用的工具。它與Access,Oracle和SQL Server等資料庫不同,資料庫提供了更強有力的數據存儲和分析能力,例如:數據索引、排序、查找、相關一致性等,它僅僅是存儲數據。事實上它與其他數據表現形式最大的不同是:它極其簡單,這是一個看上去有點瑣細的優點,但正是這點使它與眾不同。
針對XML格式數據,R語言XML包可以對其進行數據導入與處理,詳見下麵的案例說明。
案例1
直接輸入一段標記語言文本,使用XML包解析。
library(XML)
tt =
'<x>
<a>text</a>
<b foo="1"/>
<c bar="me">
<d>a phrase</d>
</c>
</x>'
doc = xmlParse(tt)
xmlToList(doc)
# use an R-level node representation
doc = xmlTreeParse(tt)
xmlToList(doc)
案例2
導入已有的xml格式數據並處理,本案例用到的是手機通訊錄xml數據,按如下步驟操作:
#讀取xml格式數據並解析
xmlfile=xmlParse(file.choose(),encoding="UTF-8")
class(xmlfile)
#形成根目錄列表數據
xmltop = xmlRoot(xmlfile)
class(xmltop) #查看類
xmlName(xmltop) #查看根目錄名
xmlSize(xmltop) #查看根目錄總數
xmlName(xmltop[[1]]) #查看子目錄名
# 查看第一個子目錄
xmltop[[1]]
# 查看第二個子目錄
xmltop[[2]]
#子目錄節點
xmlSize(xmltop[[1]]) #子目錄節點數
xmlSApply(xmltop[[1]], xmlName) #子目錄節點名
xmlSApply(xmltop[[1]], xmlAttrs) #子目錄節點屬性
xmlSApply(xmltop[[1]], xmlSize) #子目錄節點大小
#查看第一個子目錄的第一個節點
xmltop[[1]][[1]]
#查看第一個子目錄的第二個節點
xmltop[[1]][[2]]
#第二個子目錄
xmltop[[2]][[1]]
xmltop[[2]][[2]]
xmltop[[1]][[3]][[1]][[1]] #查看聯繫人電話
xmltop[['Contact']][['PhoneList']][[1]][[1]] #第二種方式
getNodeSet(xmltop, "//Contact/PhoneList")[[1]][[1]][[1]] #第三種方式
xmltop[[1]][[3]][[1]][[1]] = 13717232323 #更改聯繫人電話
xmltop[[1]][[1]][[1]]= "zhangsan "#更改聯繫人姓名
#保存
saveXML(xmltop, file="out.xml",encoding="UTF-8")
xml格式轉dataframe
按如下步驟操作:
xmlToDataFrame(xmlfile) #第一種方式,直接用xmlToDataFrame()函數
library("plyr") #第二種方式,數據格式處理專用包plyr
MyContact=ldply(xmlToList(file.choose()), data.frame) #先轉成list,再轉dataframe
View(MyContact)
# 查看聯繫方式
MyContact[,c("Name" ,"PhoneList.Phone.text")]
# 聯繫方式保存
write.csv(MyContact, "MyContact.csv", row.names=FALSE)
反饋與建議
- 作者:ShangFR
- 郵箱:[email protected]