1、首先下载libxml2源码并编译
#git clone https://gitlab.gnome.org/GNOME/libxml2.git
#cd libxml2
#mkdir build
#cd build
#cmake ..
#make
#make install
2、例程如下
代码,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: C
4、问题,如果编译有问题,发生找不到.h的情况,可能是头文件路径的问题,可以通过执行如下命令解决
cp /usr/include/libxml2/libxml /usr/include/libxml -rf
5、如果使用cmake,可添加如下配置到cMakelists.txt
# libxml2
include_directories(/usr/local/include/libxml2)
link_libraries(xml2)
add_executable(test test.c)