解析XML文件

XML(Extensible Markup Language)是一种标记语言,被设计用来传输和存储数据,而不是用于显示数据。它和JSON(JavaScript Object Notation)的作用是一致的。

既然XML的作用在于传送数据,那么两件重要的事情就是XML的生成和解析这两个逆向的过程。XML的文件格式由W3C指定统一的标准,不管什么编程语言,只要按照其标准进行,就可以正确的生成和解析XML文件。

常见的XML编程接口有DOM和SAX。
DOM :Document Object Model,一般会在内存中以树的形式表达。一次性读取整个文档,把文档中所有元素保存在内存中的一个树结构里。
SAX :Simple API for XML,一般采用事件驱动模型。

一、浏览器解析XML文件
所有现代浏览器都内建了用于读取和操作 XML 的 XML 解析器。 解析器会把 XML 转换为 JavaScript 可存取的 XML DOM 对象。 注意Internet Explorer 的解析方法和其他浏览器是不同的。

下面是浏览器解析XML文件的例子,兼容了IE和其他浏览器。
<html>
<body>
<script type="text/javascript">
try //Internet Explorer
  {
  xmlDoc=new ActiveXObject("Microsoft.XMLDOM");
  }
catch(e)
  {
  try //Firefox, Mozilla, Opera, etc.
    {
    xmlDoc=document.implementation.createDocument("","",null);
    }
  catch(e) {alert(e.message)}
  }
try 
  {
  xmlDoc.async=false;
  xmlDoc.load("books.xml");
  document.write("xmlDoc is loaded, ready for use");
  }
catch(e) {alert(e.message)}
</script>
</body>
</html>

二、Python解析XML文件
标准库中提供了两种解析的方法。
http://www.w3cschool.cc/python/python-xml.html

xml.sax模块
parser = xml.sax.make_parser( [parser_list] ) 创建解析器对象

parser.setContentHandler() 指定特定的事件处理对象

parser.parse( xmlfile, contenthandler[, errorhandler]) 解析指定的xml文件

xml.dom模块
domtree = xml.dom.minidom.parse(xmlfile) 解析指定的xml文件

三、C++解析XML文件
标准库里没有xml的解析器,第三方库还是很丰富的。Boost C++库中有XML的解析器。另外一些轻量型的XML解析库也非常不错。
TinyXML2 解析库
这个库非常简单,只需要引入一个cpp和一个h就可以了。
下面是我写的一个例子程序,测试xml文件源于http://www.w3cschool.cc/python/python-xml.html
#include "tinyxml2.h"
#include <iostream>
using namespace std;
int main()
{
tinyxml2::XMLDocument doc;
doc.LoadFile("F:\\dream.xml");
tinyxml2::XMLElement *collect = doc.FirstChildElement("collection");

cout<<collect->Attribute("shelf")<<endl;
tinyxml2::XMLNode *movie = collect->FirstChildElement("movie");
while(movie != NULL)
{
cout<<movie->FirstChildElement("description")->GetText()<<endl;
movie = movie->NextSibling();
}
//cout<<collect->FirstChildElement("movie")->NextSibling()->FirstChildElement("year")->GetText();
return 1;
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值