xml的用处越来越广泛了,解析xml得库也非常多,总的来说分为两种,一种是把xml当作一个“树”来进行解析,一种是基于事件类型的
glib就是使用事件类型解析xml。
有5种不同的事件类型
1)一个element的开始
2)一个element的结束
3)element得文本
4)一些stuff
5) 错误
There are five kinds of event which can happen:

  • The start of an element
  • The end of an element
  • Some text (inside an element)
  • Some other stuff (processing instructions, mainly, including comments and doctypes)
  • An error
下面是一个简单的xml

simple.xml :

<zoo>
<animal noise="roar">lion</animal>
<animal noise="sniffle">bunny</animal>
<animal noise="lol">cat</animal>
<keeper/>
</zoo>

被解析成以下的动作

  • Start of “zoo”.
  • Start of “animal”, with a “noise” attribute of “roar”.
  • The text “lion”.
  • End of “animal”.
  • Start of “animal”, with a “noise” attribute of “sniffle”.
  • The text “bunny”.
  • End of “animal”.
  • Start of “animal”, with a “noise” attribute of “lol”.
  • The text “cat”.
  • End of “animal”.
  • Start of “keeper”.
  • End of “keeper”.
  • End of “zoo”.

程序运行结果
I am a lion and I go roar. Can you do it?
I am a bunny and I go sniffle. Can you do it?
I am a cat and I go lol. Can you do it?

# include < stdio. h>

gchar * current_animal_noise = NULL ;

static void start( GMarkupParseContext * context, 
        const gchar * element_name, 
        const gchar * * attribute_names, 
        const gchar * * attribute_values, 
        gpointer user_data, 
        GError * * error ) 

        const gchar * * name_cursor = attribute_names; 
        const gchar * * value_cursor = attribute_values;

while ( * name_cursor) { 
                if ( strcmp ( * name_cursor, "noise" ) = = 0) 
                current_animal_noise = g_strdup ( * value_cursor) ; 
                name_cursor+ + ; 
                value_cursor+ + ; 
        }

}

static void end( GMarkupParseContext * context, 
        const gchar * element_name, 
        gpointer user_data, 
        GError * * error ) 

        if ( current_animal_noise) 
        { 
                g_free ( current_animal_noise) ; 
                current_animal_noise = NULL ; 
        } 

static void text( GMarkupParseContext * context, 
        const gchar * text, 
        gsize text_len, 
        gpointer user_data, 
        GError * * error ) 

        if ( current_animal_noise) 
                printf ( "I am a %*s and I go %s. Can you do it?/n" , 
                    text_len, text, current_animal_noise) ; 
        printf ( "test text/n" ) ; 
}

GMarkupParser parser = { 
        . start_element = start, 
        . end_element = end, 
        . text = text, 
        . passthrough = NULL , 
        . error = NULL 
} ;

int main( ) 

        char * buf; 
        gsize length; 
        GMarkupParseContext * context; 
        g_file_get_contents( "test.xml" , & buf, & length, NULL ) ; 
        g_printf( "%s/n" , buf) ; 
        context = g_markup_parse_context_new( & parser, 0, NULL , NULL ) ; 
        if ( g_markup_parse_context_parse( context, buf, length, NULL ) = = FALSE ) 
        { 
                printf ( "Couldn't load xml/n" ) ;

                g_markup_parse_context_free(context);
        return 0;
}

glib 解析xml相关推荐

  1. python 使用sax 解析xml 文件

    这里不是说xml 的所以如果xml 不了解,可以百度大致看下即可, SAX知识了解 SAX (simple API for XML )  有解析器和事件处理器 解析器负责读取XML文档,并向事件处理器 ...

  2. c语言解析xml字符串_Python XML解析

    Python XML解析 什么是XML? XML 指可扩展标记语言(eXtensible Markup Language). 你可以通过本站学习XML教程 XML 被设计用来传输和存储数据. XML是 ...

  3. python中利用lxml模块解析xml文件报错XMLSyntaxError: Opening and ending tag mismatch

    今天在代码中第一次使用lxml解析xml文件时出错了, XMLSyntaxError: Opening and ending tag mismatch: keyEffectiveDate line 2 ...

  4. XML 解析XML文档 XML约束

    XML 什么是XML Extensible Markup Language(可扩展的标记语言) 他是一个语言,有自己的语法,和Java以及其他的编程无关 "标记" 在文件中包含类似 ...

  5. VC解析XML--使用CMarkup类解析XML

    经过今天尝试MFC解析XML串,也算有了不少收获,总结一下.          我是使用的CMarkup类对XML进行操作.                    CMarkup好象都是先从一个xml ...

  6. JAVA动态读取xml_Java动态生成和解析xml文件步骤详解

    packageday12;importjava.io.FileInputStream;importjava.util.ArrayList;importjava.util.List;importorg. ...

  7. java xml中的冒号_Java jdom解析xml文件带冒号的属性

    Java jdom解析xml文件带冒号的属性 如果xml文件解析带了冒号的属性,一般都是要特别处理,这里是命名空间,N年前遇到过一次忘记记录,后来也忘了,这次再记录下. 解决了,记录下,分享给大家,百 ...

  8. java xml dom4j 解析_在JAVA中怎么用DOM和DOM4j解析XML啊?

    二.XML文件 三.开始解析 public class JDOMTest { public static void main(String[] args) { // 进行对books.xml文件的JD ...

  9. 【学习笔记】关于DOM4J:使用DOM4J解析XML文档

    一.概述 DOM4J是一个易用的.开源的库,用于XML.XPath和XSLT中.采用了Java集合框架并完全支持DOM.SAX.和JAXP. DOM4J最大的特色是使用大量的接口,主要接口都在org. ...

  10. 详解Java解析XML的四种方法

    http://developer.51cto.com  2009-03-31 13:12  cnlw1985  javaeye  我要评论(8) XML现在已经成为一种通用的数据交换格式,平台的无关性 ...

最新文章

  1. JavaScript思维导图之数组
  2. Docker框架的使用系列教程(三)
  3. vue学习问题总结(一)
  4. PHP多种形式发送邮件
  5. Rust 1.34.1 稳定版发布,Bug 修复
  6. bat复制文件到指定目录同名_利用bat让文件在指定时间自动进行备份
  7. Lu 微分方程参数优化(拟合)
  8. HTML网页中显示图片(相对路径 绝对路径)
  9. 手机详情 html代码生成器,dede源码最新版手机移动端静态生成模块插件
  10. Linux下安装各种常用软件
  11. 怎么确定电脑上没有mysql_怎么检查电脑有没有mysql?
  12. 如何快速定位并修复Bug
  13. 猿创征文|我在人间编程那些年
  14. 如何看hbo_如何取消HBO Max订阅
  15. 查找计算机硬件和软件的翻译工具,计算机软件和硬件,PC computer software and hardware,音标,读音,翻译,英文例句,英语词典...
  16. javascript时间日期操作
  17. 大规模SNS中兴趣圈子的自动挖掘
  18. 如何使用idea 连接达梦数据库?
  19. 水果店刚起步要怎么做,一家水果店要准备什么
  20. 2018-2019 20165226 Exp7 网络欺诈防范

热门文章

  1. ubuntu18.04 RTX3080TI安装驱动、CUDA,及pytorch
  2. Kaggle上8个非常适合新人的项目
  3. Cloudcompare 界面解读与界面修改
  4. BIOS 修改IDE下解决ACHI蓝屏方法
  5. 如何使用C++实现你的量化交易策略
  6. Istio 入门(五):访问控制和流量管理
  7. Java 多线程实现多窗口售票
  8. Unity整体性能优化篇 第(四)节:代码优化 (CPU)
  9. 自学前端第二天:HTML基础知识提前汇总
  10. 易能格斯品牌深耕中国 在华战略全面升级