解析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;
}

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章