亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關(guān)于我們
? 蟲蟲下載站

?? libxml2.txt

?? 關(guān)于LINUX上XML文件的處理程序
?? TXT
字號(hào):
xcwen 
copy Bookmark http://www.lupaworld.com/30388

日志 相冊(cè) 商品 文件 書簽 好友 我的論壇 留言本 空間首頁 空間管理 LUPA開源社區(qū) 站點(diǎn)論壇 添加我的日志 多學(xué)點(diǎn)東西,再寫寫自己的收獲,和大家共分享。這樣對(duì)linux都有貢獻(xiàn)
linux c xml 編程。。
2007-04-23 18:27:04 / 個(gè)人分類:linux c 編程 

最近在做linux c xml 編程測試。

在網(wǎng)絡(luò)上似乎找不到太多的資料。
我覺得 http://www.xmlsoft.org/tutorial/index.html
的教程不錯(cuò)。給大家介紹一下。。是英文,不過很簡單。相信做編程的人不會(huì)看不懂。。
給出國內(nèi)的一資料,寫得也很不錯(cuò)。(程序 我測試過了)
使用簡介
數(shù)據(jù)類型:
xmlChar  替代char,使用UTF-8編碼的一字節(jié)字符串。如果你的數(shù)據(jù)使用其它編碼,它必須被轉(zhuǎn)換到UTF-8才能使用libxml的函數(shù)。
XmlDoc 包含由解析文檔建立的樹結(jié)構(gòu),xmlDocPtr是指向這個(gè)結(jié)構(gòu)的指針。
xmlNodePtr and xmlNode 包含單一結(jié)點(diǎn)的結(jié)構(gòu)
xmlNodePtr是指向這個(gè)結(jié)構(gòu)的指針,它被用于遍歷文檔樹。
 
       優(yōu)點(diǎn):1.   安裝、使用比較簡單,容易入門;2.   支持的編碼格式較多,能很好的解決中文問題(使用一個(gè)很簡單的編碼轉(zhuǎn)換函數(shù));3.   支持Xpath解析(這點(diǎn)對(duì)于任意定位xml文檔中的節(jié)點(diǎn)還是很有用的哦);4.支持Well-formed 和valid驗(yàn)證,具體而言支持DTD驗(yàn)證,Schema驗(yàn)證功能正在完善中(目前多數(shù)解析器都還不完全支持shema驗(yàn)證功能);5.   支持目前通用的Dom、Sax方式解析等等。
       不足:1.  指針太多,使用不當(dāng)時(shí)就會(huì)出現(xiàn)錯(cuò)誤,在Linux系統(tǒng)中表現(xiàn)為常見的段錯(cuò)誤,同樣管理不當(dāng)易造成內(nèi)存泄漏;2.個(gè)人認(rèn)為內(nèi)面有些函數(shù)的功能設(shè)計(jì)的不是很好(比如獲取Xpath函數(shù),它不獲取節(jié)點(diǎn)屬性,這樣子有些情況會(huì)定位不準(zhǔn))。
       在學(xué)習(xí)libxml2中,最好的學(xué)習(xí)手冊(cè)就是由官方開發(fā)者提供的開發(fā)手冊(cè)就是libxml2-devel-2.6.19,rpm –q –d libxml2獲得文檔路徑,就是它了。
關(guān)于xml
開始研究 LibXML2 庫之前,讓我們先來鞏固一下 XML 的相關(guān)基礎(chǔ)。XML 是一種基于文本的格式,它可用來創(chuàng)建能夠通過各種語言和平臺(tái)訪問的結(jié)構(gòu)化數(shù)據(jù)。它包括一系列類似 HTML 的標(biāo)記,并以樹型結(jié)構(gòu)來對(duì)這些標(biāo)記進(jìn)行排列。
例如,可參見清單 1 中介紹的簡單文檔。這是配置文件部分中研究的配置文件示例的簡化版本。為了更清楚地顯示 XML 的一般概念,所以對(duì)其進(jìn)行了簡化。

清單 1. 一個(gè)簡單的 XML 文件

 

<?xml version="1.0" encoding="UTF-8"?>

<files>

 <owner>root</owner>

 <action>delete</action>

 <age units="days">10</age>

</files>

 
清單 1 中的第一行是 XML 聲明,它告訴負(fù)責(zé)處理 XML 的應(yīng)用程序,即解析器,將要處理的 XML 的版本。大部分的文件使用版本 1.0 編寫,但也有少量的版本 1.1 的文件。它還定義了所使用的編碼。大部分文件使用 UTF-8,但是,XML 設(shè)計(jì)用來集成各種語言中的數(shù)據(jù),包括那些不使用英語字母的語言。
接下來出現(xiàn)的是元素。一個(gè)元素以開始標(biāo)記開始(如 <files>),并以結(jié)束標(biāo)記結(jié)束(如 </files>),其中使用斜線 (/) 來區(qū)別于開始標(biāo)記。
元素是Node的一種類型。XML 文檔對(duì)象模型 (DOM) 定義了幾種不同的Nodes類型,包括Elements(如files或者age)、Attributes(如units)和 Text(如root或者10)。元素可以具有子節(jié)點(diǎn)。例如,age 元素有一個(gè)子元素,即文本節(jié)點(diǎn)10。而 files 元素有七個(gè)子元素。其中三個(gè)很明顯。它們分別是三個(gè)子元素:owner、action和age。其他四個(gè)分別是元素前后的空白文本符號(hào)。
XML 解析器可以利用這種父子結(jié)構(gòu)來遍歷文檔,甚至修改文檔的結(jié)構(gòu)或內(nèi)容。LibXML2 是這樣的解析器中的其中一種,并且文中的示例應(yīng)用程序正是使用這種結(jié)構(gòu)來實(shí)現(xiàn)該目的。對(duì)于各種不同的環(huán)境,有許多不同的解析器和庫。LibXML2 是用于 UNIX 環(huán)境的解析器和庫中最好的一種,并且經(jīng)過擴(kuò)展,它提供了對(duì)幾種腳本語言的支持,如 Perl 和 Python。
 
1 tree
/*******************************************
 * compile: gcc -I/usr/include/libxml2/ -lxml2 tree1.c
 * usage: create a xml tree
 *
*******************************************/
#include <stdio.h>
#include <libxml/parser.h>
#include <libxml/tree.h>                     
int main(int argc, char **argv)
{
       xmlDocPtr doc = NULL;       /* document pointer */
       xmlNodePtr root_node = NULL, node = NULL, node1 = NULL; /* node pointers */                                                      
      
       //Creates a new document, a node and set it as a root node
       doc = xmlNewDoc(BAD_CAST "1.0");
       root_node = xmlNewNode(NULL, BAD_CAST "root");
       xmlDocSetRootElement(doc, root_node);    
      
       //creates a new node, which is "attached" as child node of root_node node. 
       xmlNewChild(root_node, NULL, BAD_CAST "node1",BAD_CAST "content of node1");
 
       // xmlNewProp() creates attributes, which is "attached" to an node.
       node=xmlNewChild(root_node, NULL, BAD_CAST "node3", BAD_CAST"node has attributes");
       xmlNewProp(node, BAD_CAST "attribute", BAD_CAST "yes");  
//Here goes another way to create nodes.
       node = xmlNewNode(NULL, BAD_CAST "node4");
       node1 = xmlNewText(BAD_CAST"other way to create content");
       xmlAddChild(node, node1);
       xmlAddChild(root_node, node);                            
//Dumping document to stdio or file
       xmlSaveFormatFileEnc(argc > 1 ? argv[1] : "-", doc, "UTF-8", 1);  
/*free the document */
       xmlFreeDoc(doc);
       xmlCleanupParser();
       xmlMemoryDump();      //debug memory for regression tests
 
       return(0);
}
生成的xml:
[denny@localhost xml]$ gcc -I/usr/include/libxml2/ -lxml2 tree1.c
[denny@localhost xml]$ ./a.out
<?xml version="1.0" encoding="UTF-8"?>
<root>
 <node1>content of node1</node1>
 <node3 attribute="yes">node has attributes</node3>
 <node4>other way to create content</node4>
</root>
 
執(zhí)行序列:
1 聲明指針:文檔指針(xmlDocPtr),結(jié)點(diǎn)指針(xmlNodePtr);
2 生成文檔doc:xmlNewDoc
3 生成根結(jié)點(diǎn)root_node: xmlNewDocNode ,xmlNewNode
4 文檔與根結(jié)點(diǎn)捆綁: xmlDocSetRootElement
5 結(jié)點(diǎn)操作
1)創(chuàng)建子結(jié)點(diǎn):xmlNewChild或xmlNewNode
2)設(shè)置結(jié)點(diǎn)屬性:xmlNewProp
3)設(shè)置結(jié)點(diǎn)值:xmlNewText,xmlNewChild, xmlAddChild
6 釋放內(nèi)存:xmlFreeDoc,xmlMemoryDump
7 lib的載入退出: LIBXML_TEST_VERSION , xmlCleanupParser
2 parse
對(duì)于應(yīng)用程序來說,讀取 XML 文件的第一步是加載該數(shù)據(jù)并將其解析為一個(gè)Document對(duì)象。在此基礎(chǔ)上,可以對(duì) DOM 樹進(jìn)行遍歷以獲取特定的節(jié)點(diǎn)。
/*******************************************
* compile: gcc -I/usr/include/libxml2/ -lxml2 tree1.c
 * usage: tree2 filename_or_URL
 *
*******************************************/
#include <stdio.h>
#include <libxml/parser.h>
#include <libxml/tree.h>
 
#ifdef LIBXML_TREE_ENABLED
 
static void
print_element_names(xmlNode * a_node)
{
    xmlNode *cur_node = NULL;
 
    for (cur_node = a_node; cur_node; cur_node = cur_node->next) {
        if (cur_node->type == XML_ELEMENT_NODE) {
            printf("node type: Element, name: %s\n", cur_node->name);
        }
        print_element_names(cur_node->children);
    }
}
 
/**
 * Simple example to parse a file called "file.xml",
 * walk down the DOM, and print the name of the
 * xml elements nodes.
 */
int
main(int argc, char **argv)
{
    xmlDoc *doc = NULL;
    xmlNode *root_element = NULL;
 
    if (argc != 2)
        return(1);
 
    //LIBXML_TEST_VERSION
 
    /*parse the file and get the DOM */
    doc = xmlReadFile(argv[1], NULL, 0);
 
    if (doc == NULL) {
        printf("error: could not parse file %s\n", argv[1]);
    }
 
    /*Get the root element node */
    root_element = xmlDocGetRootElement(doc);
 
    print_element_names(root_element);
 
    /*free the document */
    xmlFreeDoc(doc);
 
    //xmlCleanupParser();
 
    return 0;
}
#else
int main(void) {
    fprintf(stderr, "Tree support not compiled in\n");
    exit(1);
}
#endif
 
執(zhí)行序列:
1 聲明指針:文檔指針(xmlDocPtr),結(jié)點(diǎn)指針(xmlNodePtr);
2 得到文檔doc: xmlReadFile
3 得到根結(jié)點(diǎn)root_node:xmlDocGetRootElement
4 結(jié)點(diǎn)操作:
 1)獲得到結(jié)點(diǎn)值:xmlNodeGetContent(對(duì)應(yīng)于xmlFree)
2)遍歷:
指向下一個(gè)結(jié)點(diǎn):xmlNodePtr ->children
結(jié)點(diǎn)值:xmlNodePtr->name,
結(jié)點(diǎn)內(nèi)遍歷:xmlNodePtr->next
5 釋放內(nèi)存:xmlFreeDoc,xmlFree 




引用鏈接 推薦 收藏 導(dǎo)入論壇 等級(jí)(0) 編輯 管理 查看(2) 評(píng)論(0) 評(píng)分(0/0) 

TAG: 

查看全部評(píng)論我來說兩句評(píng)分 -5 -3 -1 - +1 +3 +5  
內(nèi)容  

昵稱  

驗(yàn)證   

提交評(píng)論 
 
  

清空Cookie - 聯(lián)系我們 - LUPA開源社區(qū) - 申請(qǐng)自己的空間 


浙ICP備06002895號(hào)


Open Toolbar

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號(hào) Ctrl + =
減小字號(hào) Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
欧美中文字幕一区二区三区亚洲| 自拍偷在线精品自拍偷无码专区| 制服丝袜亚洲色图| 欧美性生交片4| 欧美无乱码久久久免费午夜一区| 色视频成人在线观看免| 日本韩国一区二区三区| 欧美性videosxxxxx| 欧美亚洲高清一区| 欧美精品日韩一区| 日韩美女主播在线视频一区二区三区| 91精品国产91久久久久久一区二区| 欧美丰满嫩嫩电影| 日韩视频免费直播| 2023国产精品| 国产精品国产三级国产普通话三级| 国产精品久久久久桃色tv| 亚洲欧美视频在线观看视频| 亚洲一区在线观看免费| 日精品一区二区三区| 久久成人久久爱| 国产69精品久久久久777| 成人激情黄色小说| 日本精品一级二级| 日韩一区二区影院| 欧美激情一区在线观看| 亚洲视频1区2区| 亚洲成人激情av| 美国三级日本三级久久99| 国产盗摄精品一区二区三区在线| 国产**成人网毛片九色 | 4438x亚洲最大成人网| 日韩欧美国产一区二区三区| 欧美激情一区二区三区蜜桃视频| 亚洲精品美腿丝袜| 久久国产尿小便嘘嘘| 国产精品1区2区| 欧洲av一区二区嗯嗯嗯啊| 正在播放一区二区| 国产精品乱人伦中文| 亚洲狠狠爱一区二区三区| 精品一区二区免费| 色婷婷精品久久二区二区蜜臀av| 一区二区久久久久| 亚洲国产精品久久一线不卡| 日韩成人免费电影| 丰满亚洲少妇av| 久久99精品久久久久婷婷| 欧美国产综合一区二区| 欧美精品一区二| 亚洲人成7777| 国内精品免费**视频| 91亚洲精品乱码久久久久久蜜桃| 欧美一区二区三区在线观看| 国产精品久久久久三级| 日韩av网站免费在线| 99在线热播精品免费| 亚洲综合成人在线视频| 精品乱码亚洲一区二区不卡| 国产一区二区毛片| 欧美网站一区二区| 国产亚洲精久久久久久| 日韩av一区二区在线影视| 91麻豆精东视频| 国产欧美日韩亚州综合| 毛片一区二区三区| 欧美性xxxxx极品少妇| 国产精品欧美久久久久无广告| 日韩va亚洲va欧美va久久| 一本色道久久综合亚洲91| 久久精品日韩一区二区三区| 奇米精品一区二区三区在线观看| bt欧美亚洲午夜电影天堂| 久久久久亚洲综合| 久久激五月天综合精品| 欧美日韩精品免费| 亚洲美腿欧美偷拍| 成人免费av在线| 精品盗摄一区二区三区| 日韩国产高清影视| 欧美性受xxxx| 玉米视频成人免费看| 9久草视频在线视频精品| 久久久另类综合| 国模娜娜一区二区三区| 91精品国产一区二区| 亚洲成av人片一区二区| 91国偷自产一区二区开放时间 | 加勒比av一区二区| 91精品国产综合久久精品app| 亚洲柠檬福利资源导航| av在线不卡电影| 中文字幕在线观看不卡| 成人在线视频首页| 国产精品亲子乱子伦xxxx裸| 国产一区中文字幕| 2021国产精品久久精品| 国内精品在线播放| 久久免费美女视频| 国产精品一区2区| 日本一区二区三区高清不卡| 国产精品一二三四| 国产欧美日韩在线| av不卡在线播放| 成人免费在线观看入口| 99久久精品国产麻豆演员表| 成人免费一区二区三区视频| 91亚洲精华国产精华精华液| 亚洲人午夜精品天堂一二香蕉| 91在线观看污| 一区二区三区免费观看| 欧美日韩精品欧美日韩精品| 日韩精品亚洲一区二区三区免费| 欧美一区二区三区啪啪| 蜜桃精品视频在线观看| 日韩一区二区三区电影在线观看| 毛片不卡一区二区| 国产欧美一区二区精品性色 | 91蜜桃婷婷狠狠久久综合9色| 亚洲欧美激情视频在线观看一区二区三区| av中文字幕亚洲| 亚洲小少妇裸体bbw| 欧美高清你懂得| 韩国一区二区视频| 国产精品久久久久影院色老大| 色综合久久久久久久| 亚洲午夜久久久久久久久电影网| 欧美视频中文字幕| 裸体在线国模精品偷拍| 久久精品欧美日韩| 91蝌蚪国产九色| 午夜成人免费电影| 久久久一区二区| 一本到不卡精品视频在线观看| 亚洲图片欧美视频| 精品久久久久久久久久久久久久久久久 | 日韩成人一区二区| 久久久美女毛片| 91麻豆6部合集magnet| 日本不卡视频一二三区| 国产色综合一区| 在线视频一区二区三| 麻豆专区一区二区三区四区五区| 中文字幕第一区综合| 在线观看日韩国产| 国产一区二区按摩在线观看| 国产精品美女久久久久aⅴ | 亚洲欧美一区二区视频| 欧美日韩美女一区二区| 国产91精品久久久久久久网曝门 | 色综合中文综合网| 在线观看一区二区精品视频| 久久99精品国产| 亚洲欧美一区二区三区极速播放| 7878成人国产在线观看| 成人免费毛片app| 日本亚洲欧美天堂免费| 亚洲欧洲制服丝袜| 精品国产a毛片| 欧美视频精品在线观看| 国产二区国产一区在线观看| 午夜不卡av免费| 中文字幕av一区二区三区高| 欧美一区二区三区小说| 91婷婷韩国欧美一区二区| 国产在线视频精品一区| 亚洲一区二区不卡免费| 国产精品狼人久久影院观看方式| 欧美日韩精品欧美日韩精品| av一区二区三区黑人| 国产一区视频网站| 亚洲成av人片在线观看| 国产精品成人免费| www久久精品| 日韩一级高清毛片| 精品视频123区在线观看| jizzjizzjizz欧美| 国产精品一二三| 捆绑紧缚一区二区三区视频| 亚洲愉拍自拍另类高清精品| 国产欧美视频在线观看| 日韩视频一区二区三区在线播放| 欧美影院精品一区| 成人动漫一区二区| 国产白丝网站精品污在线入口| 麻豆91免费观看| 免费的成人av| 日韩成人一级大片| 午夜精品久久久久久不卡8050| 亚洲天堂中文字幕| 国产精品久久久久毛片软件| 国产欧美一区二区精品性| 久久亚洲影视婷婷| 欧美刺激午夜性久久久久久久| 欧美午夜不卡在线观看免费| 97久久精品人人做人人爽50路| 国产风韵犹存在线视精品| 国产激情一区二区三区桃花岛亚洲| 久久99久久99精品免视看婷婷| 青青草国产精品97视觉盛宴|