1、首先下载libxml2源码并编译
#git clone https://gitlab.gnome.org/GNOME/libxml2.git #cd libxml2 #mkdir build #cd build #cmake .. #make #make install2、例程如下
代码,test.cpp
/* * date : 2020-10-22 * author : Mike */ #include <stdio.h> #include <string.h> #include <libxml/parser.h> typedef struct { char *name; char *author; char *date; char *type; }book; void printBook(book book1); int main() { xmlDocPtr bookDocPtr; xmlNodePtr booksNodePtr; // libxml默认将各个节点间的空格当作一个节点 xmlKeepBlanksDefault(0); bookDocPtr = xmlParseFile("testxml.xml"); if (bookDocPtr == NULL) { fprintf(stderr, "xmlReadFile fail"); exit(1); } book onebook; // root node booksNodePtr = xmlDocGetRootElement(bookDocPtr); // book node xmlNodePtr bookNodePtr = booksNodePtr->children; while (bookNodePtr) { // name xmlNodePtr namePtr = bookNodePtr->children; onebook.name = (char*)xmlNodeGetContent(namePtr); // author xmlNodePtr authorPtr = namePtr->next; onebook.author = (char*)xmlNodeGetContent(authorPtr); // date xmlNodePtr datePtr = authorPtr->next; onebook.date = (char*)xmlNodeGetContent(datePtr); // type xmlNodePtr typePtr = datePtr->next; onebook.type = (char*)xmlNodeGetContent(typePtr); printBook(onebook); bookNodePtr = bookNodePtr->next; } return 0; } void printBook(book book1) { printf("name: %s\n", book1.name); printf("author: %s\n", book1.author); printf("date: %s\n", book1.date); printf("type: %s\n", book1.type); }xml文件,testxml.xml
<?xml version="1.0" encoding="UTF-8" ?> <books> <ietm1> <name id="1">1</name> <author>M</author> <date>2020</date> <type>A</type> </ietm1> <ietm2> <name>2</name> <author>N</author> <date>1022</date> <type>B</type> </ietm2> <ietm3> <name>3</name> <author>O</author> <date>22</date> <type>C</type> </ietm3> </books>3、测试
#g++ test.cpp -o test -lxml2 -I/usr/include/libxml2/libxml -Wl,-rpath=/usr/local/lib64/ #./test name: 1 author: M date: 2020 type: A name: 2 author: N date: 1022 type: B name: 3 author: O date: 22 type: C4、问题,如果编译有问题,发生找不到.h的情况,可能是头文件路径的问题,可以通过执行如下命令解决
cp /usr/include/libxml2/libxml /usr/include/libxml -rf5、如果使用cmake,可添加如下配置到cMakelists.txt
# libxml2 include_directories(/usr/local/include/libxml2) link_libraries(xml2) add_executable(test test.c)
