xml檔案解析--libxml2庫函式解釋
本指南中的例子程式碼示範如何做到:
• 解析文件
• 取得指定元素的文字
• 新增一個元素及它的內容
• 新增一個屬性
• 取得一個屬性的值
例子的完整程式碼包含在附錄中
資料型別
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”是在這個指南中使用文件的根型別。
取得元素內容
你找到在文件樹中你要查詢的元素後可以取得它的內容。在這個例子中我們查詢“story”元素。程序將在冗長的樹中查詢我們感興趣的元素。我們假定期你已經有了一個名為doc的xmlDocPtr和一個名為cur的xmlNodPtr。
①cur = cur->xmlChildrenNode;
②while (cur != NULL) {
if ((!xmlStrcmp(cur->name, (const xmlChar *)"storyinfo"))){
parseStory (doc, cur);
}
cur = cur->next;
}
①取得cur的第一個子結點,cur指向文件的根,即“story”元素。
②這個迴圈迭代通過“story”的子元素查詢“storyinfo”。這是一個包含有我們將查詢的“keywords”的元素。它使用了字串比較函式xmlStrcmp。如果相符,它呼叫函式parseStory。
void
parseStory (xmlDocPtr doc, xmlNodePtr cur) {
xmlChar *key;
① cur = cur->xmlChildrenNode;
②while (cur != NULL) {
if ((!xmlStrcmp(cur->name, (const xmlChar *)"keyword"))) {
③ key = xmlNodeListGetString(doc, cur->xmlChildrenNode, 1);
printf("keyword: %s\n", key);
xmlFree(key);
}
cur = cur->next;
}
return;
}
② 像上面那個迴圈一樣,我們能過迭代,查詢我們感興趣的叫做“keyword”的元素。
③ 當我們找到元素“keyword”時,我們需要列印它包含在XML中的記錄的內容,文字被包含於元素的子結點中,因此我們藉助了cur->xmlChildrenNode,為了取得文字,我們使用函式xmlNodeListGetString,它有一個文件指標引數,在這個例子中,我們僅僅列印它。
註釋
因為xmlNodeListGetString為它返回的字串分配記憶體,你必須使用xmlFree釋放它。
使用XPath取得元素內容
除了一步步遍歷文件樹查詢元素外,包含支援使用Xpath表示式取得指定結點集。完整的Xpath API文件在這裡。Xpath允許通過路徑文件搜尋匹配指定條件的結點。在下面的例子中,我們搜尋文件中所有的“keyword”元素。
註釋
下面是Xpath完整的討論。它詳細的使用資料,請查閱Xpath規範。
這個例子完整的程式碼參見附錄D,XPath例程程式碼。
Using XPath requires setting up an xmlXPathContext and then supplying the XPath expression and the context to the xmlXPathEvalExpression
相關推薦
xml檔案解析--libxml2庫函式解釋
本指南中的例子程式碼示範如何做到: • 解析文件 • 取得指定元素的文字 • 新增一個元素及它的內容 • 新增一個屬性 • 取得一個屬性的值 例子的完整程式碼包含在附錄中 資料型別 Libxml定義了許多資料型別,我們將反覆碰到它們,它隱藏了雜亂的來源以致你不必處理它除非你有特定的需要
C++讀寫XML檔案(libxml2庫)
分享一下我老師大神的人工智慧教程!零基礎,通俗易懂!http://blog.csdn.net/jiangjunshow 也歡迎大家轉載本篇文章。分享知識,造福人民,實現我們中華民族偉大復興!  
tomcat server.xml檔案以及虛擬主機的解釋(精華~)
轉自:http://blog.csdn.net/liuxuejin/article/details/9104055 基於以下說法的領悟: 若只配appBase,不配Context 的docBase(appBase和docBase二選一就可以了),則appBase的每個資料夾
Android7.1 [Camera] cam_board.xml 檔案解析原始碼分析(一)
原始碼平臺:rk3399 RK支援了很多個攝像頭,在驅動目錄hardware/rockchip/camer
ini檔案解析c庫(iniparser)
github:https://github.com/ndevilla/iniparser 原文地址: http://blog.csdn.net/orz415678659/article/details/9533259 一.交叉編譯ini解析庫 下載iniparser-3.1.tar.gz 2
技術總結:XML檔案解析
近期整理了以前的程式碼,將XML檔案的解析程式碼程式設計了一個工具。通過Document類得到一個NodeList,遍歷其得到標籤,通過標籤得到XML檔案的內容。利用抽象方法提供給使用者處理檔案的介面。程式碼如下: /* * @auther yc * 2018/10/1
Linux C高階程式設計——檔案操作之庫函式
Linux C高階程式設計——檔案操作之庫函式 宗旨:技術的學習是有限的,分享的精神是無限的 ——為什麼要設計標準I/O庫? 直接使用API進行檔案訪問時,需要考慮許多細節問題 例如:read、write時,緩衝區的大小該如何確定,才能使效率最優 標準I/O庫封裝了諸多
struts2中struts.xml和web.xml檔案解析及工作原理
web.xml <?xml version="1.0" encoding="UTF-8"?> <web-app id="WebApp_9" version="2.4" xmlns="http://java.sun.com/xml/ns/j2ee" xmln
xml檔案解析—DOM方式
1:xml檔案<?xml version="1.0" encoding="UTF-8"?> <bookstore> <book id="1"> <name>豬1戒</name>
JAVA以及JSP中讀取XML檔案(解析及路徑問題)
在系統開發過程中,從配置檔案中讀取配置資訊是每一個系統必須具備的功能,例如,我們要配置讀取資料庫配置資訊,包括驅動程式名、連線字串,使用者名稱,口令等資訊,由於這些資訊會隨著使用者的不同而發生
Java 操作xml檔案的dom4J庫使用
XML簡介 什麼是xml? XML 指可擴充套件標記語言(EXtensible Markup Language) XML 是一種標記語言,很類似 HTML XML 的設計宗旨是傳輸資料,而非顯示資料 XML 標籤沒有被預定義。您需要自行定義標籤。 XM
xml檔案解析-dom4j解析
1 package cn.sxt.day0105.dom4j; 2 3 import java.io.File; 4 import java.util.Iterator; 5 6 import org.dom4j.Attribute; 7 import org.dom4j.Docume
libxml2庫函式詳解
許多事物符合80/20法則,libxml中也是20%的函式提供了80%的功能。下面的列表列出了libxml的主要函式及其用法說明。 1. 全域性函式說明 標頭檔案引用 xml2config --cflags 庫檔案引用 xml2config -
java反射與xml檔案解析
在專案開發的過程中,遇到了要將日誌匯出為xml格式和將xml匯入到日誌資料庫中的功能需求,因為專案中存在多種日誌形式(這聽起來很奇葩是不是?),我實在懶得為每一種日誌都寫一個方法。想到在開始的設計過程中,將每種的日誌都對映為一個pojo,故想到了java的反射機制,
linux檔案程式設計-C庫函式使用以及時間程式設計
linux檔案程式設計-C庫函式使用 檔案的建立: FILE *fopen(const char *PATHname,const char *mode) 檔案的讀取: SIZE_t fread(void *ptr,size_t size,size_t n,FILE *str
xml檔案解析的幾種方式(一)
常見的幾種解析xml檔案的方式 XML的解析方式有很多,光開源的就有十多種:如Xerces、JDOM、DOM4J、XOM、JiBX、KXML、XMLBeans、jConfig、XStream、XJR等。 但是最常用的還是sax,dom,pull,dom4j 而androi
XML檔案解析--xpath技術
最近用到xml檔案解析,剛開始竟然忘了xpath,一股腦不斷的用各種for,for,for迴圈遍歷,還在想break來減少迴圈…,寫得差不多的時候覺得很不對勁,終於想到xpath(我不是菜鳥,我是小菜鳥…)。先了解下皮毛吧,記錄一下。 一、Element(元素
簡單看Spring原始碼--對xml檔案解析
Spring如何解析xml配置檔案? xml配置檔案是Spring中極其重要的一部分,讓我們一起看一下spring解析xml檔案的。 以下是一段簡單的通過類路徑下的test.xml檔案載入bean獲得BeanFactory的程式碼: BeanFac
MyBatis(一) xml檔案解析流程 Configuration
1.Configuration <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Co
C語言檔案操作標準庫函式與Linux系統函式效率比較
我們都知道,C語言在UNIX/Linux系統下有一套系統呼叫(系統函式),比如檔案操作open()、close()、write()、read()等,而標準C語言的庫函式中也有一套對檔案的操作函式fopen()、fclose()、fwrite()、fread()等