歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Linux基礎 >> Linux教程 >> Linux環境下C使用的XML解析庫:libxml2

Linux環境下C使用的XML解析庫:libxml2

日期:2017/2/28 16:31:00   编辑:Linux教程

Libxml是一個實現讀、創建及操縱XML數據功能的C語言庫。這個指南提供例子代碼並給 出它基本功能的解釋。在這個項目的主頁上有Libxml及更多關於它可用的資料。包含有完整的API文檔。這個指南並不能替代這些完整的文檔,但是闡明功 能需要使用庫來完成基本操作。

這個指南基於一個簡單的XML應用,它使用我寫的一篇文章生成,它包含有元數據和文章的主體。

本指南中的例子代碼示范如何做到:

? 解析文檔

? 取得指定元素的文本

? 添加一個元素及它的內容

? 添加一個屬性

? 取得一個屬性的值

例子的完整代碼包含在附錄中

數據類型

Libxml定義了許多數據類型,我們將反復碰到它們,它隱藏了雜亂的來源以致你不必處理它 除非你有特定的需要。xmlChar 替代char,使用UTF-8編碼的一字節字符串。如果你的數據使用其它編碼,它必須被轉換到UTF-8才能使用libxml的函數。在libxml編碼 支持WEB頁面有更多關於編碼的有用信息。

XmlDoc 包含由解析文檔建立的樹結構,xmlDocPtr是指向這個結構的指針。

xmlNodePtr and xmlNode 包含單一結點的結構xmlNodePtr是指向這個結構的指針,它被用於遍歷文檔樹。

解析文檔

解析文檔時僅僅需要文件名並只調用一個函數,並有錯誤檢查。完整代碼:附錄C, Keyword例程代碼

①xmlDocPtr doc;

②xmlNodePtr cur;

③doc = xmlParseFile(docname);

④if (doc == NULL ) {

fprintf(stderr,"Document not parsed successfully. \n");

return;

}

⑤cur = xmlDocGetRootElement(doc);

⑥if (cur == NULL) {

fprintf(stderr,"empty document\n");

xmlFreeDoc(doc);

return;

}

⑦if (xmlStrcmp(cur->name, (const xmlChar *) "story")) {

fprintf(stderr,"document of the wrong type, root node != story");

xmlFreeDoc(doc);

return;

}

①定義解析文檔指針。

②定義結點指針(你需要它為了在各個結點間移動)。

④檢查解析文檔是否成功,如果不成功,libxml將指一個注冊的錯誤並停止。

注釋

一個常見錯誤是不適當的編碼。XML標准文檔除了用UTF-8或UTF-16外還可用其它編碼保存。如果文檔是這樣,libxml將自動地為你轉換到UTF-8。更多關於XML編碼信息包含在XML標准中。

⑤取得文檔根元素

⑥檢查確認當前文檔中包含內容。

⑦在這個例子中,我們需要確認文檔是正確的類型。“Story”是在這個指南中使用文檔的根類型。

Copyright © Linux教程網 All Rights Reserved