码迷,mamicode.com
首页 > 其他好文 > 详细

用R解析XML

时间:2014-11-19 08:36:41      阅读:179      评论:0      收藏:0      [点我收藏+]

标签:des   style   blog   io   ar   color   sp   文件   数据   

一、XML基本语法:

    如果我们用爬网页的方式获取数据,必然要解析网页。网页中存储数据的部分一般用XML语法,所以这里介绍一下R解析XML的方法。其实这部分内容挺简单的,没有高深的技巧,很容易搞明白。  

    首先要知道XML的基本要素:元素、属性、文本数据,我们可以看如下xml文件:

<bookstore>
<book>
  <title lang="eng">Harry Potter</title>
  <price>29.99</price>
</book>
<book>
  <title lang="eng">Learning XML</title>
  <price>39.95</price>
</book>
</bookstore>

   在这个xml里,<bookstore>是根元素,它有两个子元素<book>,第一个<book>元素又有两个子元素分别是<title>和<price>,xml就是这样通过父元素带子元素的形式组成树状结构;其中元素<title>有属性lang,其值eng必须用引号引起来,有文本数据Harry Potter(XML本身就是文本文件),R中有专门的方法可获取该文本数据。元素<price>只有文本数据,无属性。

   XML文件的基本结构如上所述,那么怎么获取这些属性、文本数据呢?这需要用到XPath语法,主要的路径表达式如下:

表达式 描述
/ 从根元素选取
// 选择文档中的元素,而不考虑它们的位置
@ 选取属性

   举几个例子:

路径表达式 结果
 /bookstore

选取根元素bookstore

注意:以“/”开头,表示该路径为绝对路径 

//book  选择所有的book元素,而不考虑它的具体位置 
//@lang  选取所有名为lang的属性 
 /bookstore//price 选择根元素bookstore下所有的price元素 
 /bookstore/book 选择根元素bookstore下所有book子元素 
//title[@lang] 选取所有带属性lang的title元素
//title[@lang="eng"] 选取所有带属性lang且值为eng的title元素

二、R中解析XML的函数:

     R中解析的函数都在XML这个包中,用法如下:

     1)读取xml文件的函数xmlParse:

     如我们将文章开头提到的xml存为books.xml文件,运行如下:     

> library(XML);
> doc = xmlParse(books.xml);
> 
> doc
<?xml version="1.0"?>
<bookstore>
  <book>
    <title lang="eng">Harry Potter</title>
    <price>29.99</price>
  </book>
  <book>
    <title lang="eng">Learning XML</title>
    <price>39.95</price>
  </book>
</bookstore>

    2)获取元素的函数getNodeSet:

> prices = getNodeSet(doc, ‘/bookstore//price‘);
> prices
[[1]]
<price>29.99</price>

[[2]]
<price>39.95</price>

attr(,"class")
[1] "XMLNodeSet"

    3)解析元素的文本数据xmlValue:

> xmlValue(prices[[1]])
[1] "29.99"

xmlValue的输入参数类型为XMLNode,如果想一次性获得XMLNodeSet中元素的文本数据,可用如下函数:

> sapply(1:length(prices), function(x) xmlSApply(prices[[x]], xmlValue))
   text    text 
"29.99" "39.95

 

用R解析XML

标签:des   style   blog   io   ar   color   sp   文件   数据   

原文地址:http://www.cnblogs.com/thinkers-dym/p/4090840.html

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