解析XML文件
发布时间:2020-12-16 05:54:26 所属栏目:百科 来源:网络整理
导读:XML(Extensible Markup Language)是一种标记语言,被设计用来传输和存储数据,而不是用于显示数据。它和JSON(JavaScript Object Notation)的作用是一致的。 既然XML的作用在于传送数据,那么两件重要的事情就是XML的生成和解析这两个逆向的过程。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 解析库
https://github.com/leethomason/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; } (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |