在前面一篇文章我提到了一種分析文件的方法,即呼叫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...