libxml讀取xml檔案的其他方法

2021-06-06 07:39:32 字數 1575 閱讀 4212

在前面一篇文章我提到了一種分析文件的方法,即呼叫xmlparsefile函式。當我看了libxml官網上的code examples之後,我發現libxml還提供了更加精準的分析方式。

1 呼叫xmlreadfile函式

xmlreadfile函式接收三個引數,第乙個引數是檔名,第二個引數是編碼型別,第三個引數是分析時的選項。由於提供了更多的引數,所以這個函式能更精確的處理檔案。這個函式返回乙個xmldocptr,得到這個指標後我們可以對各個節點進行操作了。

[cpp]view plain

copy

print?

xmldocptr doc = null;  

doc = xmlreadfile(docname, null, xml_parse_dtdvalid);  

2 使用xmlparsectxtptr解析檔案

libxml提供了這樣乙個結構體xmlparserctxt,這個結構體可以深入控制解析的工程,先看看他是如何工作的。

[cpp]view plain

copy

print?

xmlparserctxtptr ctxt = null;  

xmldocptr doc = null;  

ctxt = xmlnewparserctxt();  

doc = xmlctxtreadfile(ctxt, docnamen,null, 0);  

不要忘了最後釋放ctxt。

使用ctxt的乙個操作就是分塊處理檔案,即讀進檔案的一部分,邊讀邊分析。

[cpp]view plain

copy

print?

xmlparserctxtptr ctxt  = null;  

xmldocptr doc = null;  

static

char

chunk[1024];  

intnum = 0;  

file

* fd = null;  

fd = fopen(docname, "rb"

);  

if(null == fd)   

num = fread(chunk, 1, 1024, fd);  

if(num <= 0)   

ctxt = xmlcreatepushparserctxt(null, null, chunk, num, docname);  

if(null == ctxt)   

while

((num = fread(chunk,1,1024,fd)) >0)   

xmlparsechunk(ctxt, chunk,0,1);  

doc = ctxt->mydoc;  

num = ctxt->wellformed;  

xmlfreeparserctxt(ctxt);  

if(0 == num)   

// handle doc

xmlfreedoc(doc);  

fclose(fd);  

libxml的使用(1) 讀取xml

libxml是乙個用於解析xml檔案的庫,在各個平台下都能使用,也支援多種語言,如c,python等。這裡是官方 上面有libxml的api和一些code examples,都是英文的。不過比較簡單。libxml的基礎功能就是對xml的讀和寫。下面將簡單介紹libxml的讀的功能。大部分內容是參照l...

libxml的使用(1) 讀取xml

libxml是乙個用於解析xml檔案的庫,在各個平台下都能使用,也支援多種語言,如c,python等。這裡是 官方 上面有libxml的api和一些code examples,都是英文的。不過比較簡單。libxml的基礎功能就是對xml的讀和寫。下面將簡單介紹libxml的讀的功能。大部分內容是參照...

libxml的使用(1) 讀取xml

libxml是乙個用於解析xml檔案的庫,在各個平台下都能使用,也支援多種語言,如c,python等。這裡是官方 上面有libxml的api和一些code examples,都是英文的。不過比較簡單。libxml的基礎功能就是對xml的讀和寫。下面將簡單介紹libxml的讀的功能。大部分內容是參照l...