使用libxml2解析xml

book.xml

<?xml version="1.0" encoding="UTF-8" ?>
<books>
    <book2>
        <name id="1">c primer plus111</name>
        <author>unknow author</author>
        <date>unknow date</date>
    </book2>
    <book111111>
        <name>c++ 21天入门到精通</name>
        <author>未知作者</author>
        <date>未知日期</date>
    </book111111>
</books>

  

//
// Created by gxf on 2020/2/6.
//

#include <stdio.h>
#include <string.h>
#include <libxml/parser.h>
//#include <libxml/tree.h>

void println(char *s);

typedef struct {
    char *name;
    char *author;
    char *date;
}book;

void printBook(book book1);

int main() {
    xmlDocPtr bookDocPtr;
    xmlNodePtr booksNodePtr;
    char *bookDocName = "/Users/gxf/CLionProjects/untitled/books.xml";

    // libxml默认将各个节点间的空格当作一个节点
    xmlKeepBlanksDefault(0);
    bookDocPtr = xmlParseFile(bookDocName);
    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;
//        println(xmlNodeGetContent(namePtr));
        onebook.name = xmlNodeGetContent(namePtr);

        // author
        xmlNodePtr authorPtr = namePtr->next;
//        println(xmlNodeGetContent(authorPtr));
        onebook.author = xmlNodeGetContent(authorPtr);

        // date
        xmlNodePtr datePtr = authorPtr->next;
//        println(xmlNodeGetContent(datePtr));
        onebook.date = xmlNodeGetContent(datePtr);

        printBook(onebook);

        bookNodePtr = bookNodePtr->next;
    }

    return 0;
}

void println(char *s) {
    printf("%s\n", s);
}

void printBook(book book1) {
    printf("name: %s\n", book1.name);
    printf("author: %s\n", book1.author);
    printf("date: %s\n", book1.date);
}

  cmakelist

# libxml2
include_directories(/usr/local/include/libxml2)
link_libraries(xml2)
add_executable(libxml2-demo libxml2-demo.c)

  

原文地址:https://www.cnblogs.com/luckygxf/p/12269574.html

时间: 2024-10-19 11:58:14

使用libxml2解析xml的相关文章

IOS开发使用NSXMLParser、GDataXML两种方式解析XML数据

概括:XML数据解析方式有 *IOS原生的NSXMLParser,只支持SAX方式解析,使用简单 *C语言的libxml2,同时支持DOM和SAX方式解析 *google的GDataXML,只支持DOM方式解析,基于libxml2,使用时需要将编译环境配置为非ARC,并添加libxml2.dylib动态库 GDataXMLDocument 1 使用GDataXML的DOM方式解析XML,需要导入#import "GDataXMLNode.h" /** *  DOM方式解析XML数据 *

GDataXMLNode创建和解析XML

GDataXMLNode创建xml: #import <Foundation/Foundation.h> 2 #import "GDataXMLNode.h" 3 4 int main() 5 { 6 NSError *error; 7 //创建根节点 8 GDataXMLElement *rootElement = [GDataXMLNode elementWithName:@"abc"]; 9 //创建第一个子节点 10 GDataXMLElemen

iOS多线程与网络开发之解析xml

郝萌主倾心贡献,尊重作者的劳动成果,请勿转载. 如果文章对您有所帮助,欢迎给作者捐赠,支持郝萌主,捐赠数额随意,重在心意^_^ 我要捐赠: 点击捐赠 Cocos2d-X源码下载:点我传送 游戏官方下载:http://dwz.cn/RwTjl 游戏视频预览:http://dwz.cn/RzHHd 游戏开发博客:http://dwz.cn/RzJzI 游戏源码传送:http://dwz.cn/Nret1 A.XML基本知识 1.xml概念 什么是XML全称是Extensible Markup Lan

iOS-数据解析XML解析的多种平台介绍

在iPhone开发中,XML的解析有很多选择,iOS SDK提供了NSXMLParser和libxml2两个类库,另外还有很多第三方类库可选,例如TBXML.TouchXML.KissXML.TinyXML和GDataXML.问题是应该选择哪一个呢? 解析 XML 通常有两种方式,DOM 和 SAX: DOM解析XML时,读入整个XML文档并构建一个驻留内存的树结构(节点树),通过遍历树结构可以检索任意XML节点,读取它的属性和值.而且通常情况下,可以借助XPath,直接查询XML节点. SAX

解析XML文件的两种方式 SAX和DOM

1.数据解析 解析的基本概念 所谓“解析”:从事先规定好的格式中提取数据 解析的前提:提前约定好格式,数据提供方按照格式提供数据.数据获取方则按照格式获取数据 iOS开发常见的解析:XML解析.JSON解析 2.XML数据结构 XML:Extensible Markup language(可扩展标记语言),主流数据格式之一,可以用来存储和传输数据. XML数据格式的功能 数据交换 内容管理 用作配置文件 XML数据结构的语法 声明 节点使用一对标签表示:起始和结束标签. 根节点是起始节点,只有一

ios解析XML和json数据

解析的基本概念所谓“解析”:从事先规定好的格式串中提取数据解析的前提:提前约定好格式.数据提供方按照格式提供数据.数据获取方按照格式获取数据iOS开发常见的解析:XML解析.JSON解析 一.XML数据结构XML数据结构基本概念XML:Extensible Markup language (可扩展标记语言),主流格式之一,可以用来存储和传输数据格式之一,可以用来存储和传输数据 XML数据格式的功能1.数据交换2.内容管理3.用作配置文件 XML数据结构的语法1.声明2.节点使用一对标签表示3.根

iOS-GData解析XML

iOS GData 解析XML 总结 在iOS平台上进行XML解析的方法有很多,在SDK中又自带的解析方法.但是我们更倾向于使用第三方库,原因是解析效率高,使用更加方便.下面介绍Google下的开源库GData解析XML. 可以到http://code.google.com/p/gdata-objectivec-client/source/browse/trunk/Source/XMLSupport/下载源码,下载下来后进入文件夹找到XMLSupport文件夹,将里面的GDataXMLNode.

GDataXMLNode解析XML数据详解

解析 XML 通常有两种方式,DOM 和 SAX:dom实现的原理是把整个xml文档一次性读出,放在一个树型结构里.在需要的时候,查找特定节点,然后对节点进行读或写.他的主要优势是实现简单,读写平衡:缺点是比较占内存,因为他要把整个xml文档都读入内存,文件越大,这种缺点就越明显.sax的实现方法和dom不同.他只在xml文档中查找特定条件的内容,并且只提取需要的内容.这样做占用内存小,灵活,正好满足我们的需求.他的缺点就是写,有些资料介绍了写入的方法,但是我感觉这对本例没有必要. NSXMLP

【iOS开发-网络】两种常用的方法解析XML数据

解析XML数据常用的有两种方法 第一种 使用Google的GDataXMLNode解析XML数据 使用的是DOM方式解析 先把xml一口吞掉 然后一点一点的解析 第二种 使用苹果自带的NSXMLParser解析XML数据 使用的是SAX方式解析 一个标记一个标记的解析 第一种使用步骤 第一步 首先把GDataXML文件夹放入项目中 第二步 更改Bulid Setting里面的东西 更改头文件搜索路径 在Header Search Paths里面添加路径/usr/include/libxml2 在