1. 程式人生 > >libxml2編譯與測試

libxml2編譯與測試

官網

http://xmlsoft.org/
原始碼下載

我使用的版本

libxml2-2.9.8.tar.gz

編譯原始碼

1、解壓原始碼包

[email protected]:~/xml2$ tar xvf libxml2-2.9.8.tar.gz

[email protected]:~/xml2$ cd libxml2-2.9.8/

2、生成makefile檔案

[email protected]:~/xml2/libxml2-2.9.8$ ./configure --prefix=/home/rt/opt --with-python-install-dir=/home/rt/opt
其中--prefix=為安裝路徑,--with-python-install-dir=為python安裝路徑,他有一些python安裝包需要裝,這裡我為了不影響系統原有庫,所以安裝到了自己的路徑中,如果需要安裝到自己系統中就不要新增後面的引數,直接./configure即可,後面的make install需要sudo許可權。

3、編譯,安裝

[email protected]:~/xml2/libxml2-2.9.8$ make

[email protected]:~/xml2/libxml2-2.9.8$ make install

此時在安裝路徑下就有生成的檔案了

.
├── bin
│   ├── xml2-config
│   ├── xmlcatalog
│   └── xmllint
├── drv_libxml2.py
├── include
│   └── libxml2
├── lib
│   ├── cmake
│   ├── libxml2.a
│   ├── libxml2.la
│   ├── libxml2.so -> libxml2.so.2.9.8
│   ├── libxml2.so.2 -> libxml2.so.2.9.8
│   ├── libxml2.so.2.9.8
│   ├── pkgconfig
│   └── xml2Conf.sh
├── libxml2mod.a
├── libxml2mod.la
├── libxml2mod.so
├── libxml2.py
└── share
    ├── aclocal
    ├── doc
    ├── gtk-doc
    └── man

測試

測試檔案createxmlfile.c

/********************************************************************
    created:   2007/11/09
    created:   9:11:2007   15:34
    filename: CreateXmlFile.cpp
    author:       Wang xuebin
    depend:       libxml2.lib
    build:     nmake TARGET_NAME=CreateXmlFile
    purpose:   建立一個xml檔案
*********************************************************************/
#include <stdio.h>
#include <libxml/parser.h>
#include <libxml/tree.h>
#include <string.h>
int main()
{
	//定義文件和節點指標
	xmlDocPtr doc = xmlNewDoc(BAD_CAST"1.0");
	xmlNodePtr root_node = xmlNewNode(NULL,BAD_CAST"root");
	//設定根節點
	xmlDocSetRootElement(doc,root_node);
	//在根節點中直接建立節點
	xmlNewTextChild(root_node, NULL, BAD_CAST "newNode1", BAD_CAST "newNode1 content");
	xmlNewTextChild(root_node, NULL, BAD_CAST "newNode2", BAD_CAST "newNode2 content");
	xmlNewTextChild(root_node, NULL, BAD_CAST "newNode3", BAD_CAST "newNode3 content");
	//建立一個節點,設定其內容和屬性,然後加入根結點
	xmlNodePtr node = xmlNewNode(NULL,BAD_CAST"node2");
	xmlNodePtr content = xmlNewText(BAD_CAST"NODE CONTENT");
	xmlAddChild(root_node,node);
	xmlAddChild(node,content);
	xmlNewProp(node,BAD_CAST"attribute",BAD_CAST "yes");
	//建立一個兒子和孫子節點
	node = xmlNewNode(NULL, BAD_CAST "son");
	xmlAddChild(root_node,node);
	xmlNodePtr grandson = xmlNewNode(NULL, BAD_CAST "grandson");
	xmlAddChild(node,grandson);
	xmlAddChild(grandson, xmlNewText(BAD_CAST "This is a grandson node"));
	//儲存xml文件
	int nRel = xmlSaveFile("CreatedXml.xml",doc);
	if (nRel != -1) {
		printf("一個xml文件被建立,寫入%d個位元組\n", nRel);
	}
	//釋放文件內節點動態申請的記憶體
	xmlFreeDoc(doc);
	return 1;
}

然後編譯該檔案

[email protected]:~/xml2$ gcc createxmlfile.c -o createxml -I/home/rt/opt/include/libxml2 -L/home/rt/opt/lib -lxml2
[email protected]:~/xml2$ ls
createxml  createxmlfile.c  libxml2-2.9.8  libxml2-2.9.8.tar.gz  readme.txt
[email protected]:~/xml2$ ./createxml
一個xml文件被建立,寫入245個位元組

此時生成一個xml檔案 CreatedXml.xml

<?xml version="1.0"?>
<root>
  <newNode1>newNode1 content</newNode1>
  <newNode2>newNode2 content</newNode2>
  <newNode3>newNode3 content</newNode3>
  <node2 attribute="yes">NODE CONTENT</node2>
  <son>
    <grandson>This is a grandson node</grandson>
  </son>
</root>