zoukankan      html  css  js  c++  java
  • 使用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
    ", s);
    }
    
    void printBook(book book1) {
        printf("name: %s
    ", book1.name);
        printf("author: %s
    ", book1.author);
        printf("date: %s
    ", book1.date);
    }
    

      cmakelist

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

      

  • 相关阅读:
    如何用grep命令同时显示匹配行上下的n行 (美团面试题目)
    Maven面试宝典
    Java经典设计模式 总览
    Java设计模式之工厂模式
    Java设计模式
    三次握手,四次挥手 具体发送的报文和状态都要掌握(阿里)
    运动与饮食结合
    健身计划
    Java中的多线程=你只要看这一篇就够了
    js禁止复制粘贴
  • 原文地址:https://www.cnblogs.com/luckygxf/p/12269574.html
Copyright © 2011-2022 走看看