`
sofire
  • 浏览: 146177 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

用expat 库解析XML的学习例子

阅读更多
用bcdgen转换的头文件。
对xml不大感兴趣。只是尝试用D语言改写,证明它还是能正确处理xml的。
和C程序差不多。真不爽。

/**
 * expat 中的例子改写成D语言
 * Edit By Liu Dehong @ 2007/08/10
 * version: 1.0
 */

import std.stdio;
import std.stream;
import bcd.expat.xmlparse;

extern(C)
void startElement(void* userData, XML_Char* name, XML_Char** atts)
{
    int i;
    int *depthPtr = cast(int *) userData;

    for (i = 0; i < *depthPtr; i++)
        putchar('\t');

    printf("%.*s\n", name);
    *depthPtr += 1;
}

extern(C)
void endElement(void *userData, XML_Char *name)
{
    int *depthPtr = cast(int*) userData;
    *depthPtr -= 1;
}

int main()
{
    int done;
    int depth = 0;
    XML_Parser parser;

    string fn = "a.xml";
    File f = new File(fn);

    parser  = XML_ParserCreate(null);
    XML_SetUserData(parser, &depth);
    XML_SetElementHandler(parser, cast(XML_StartElementHandler)
            &startElement, cast(XML_EndElementHandler) &endElement);

    while (!f.eof())
    {
        string line = f.readLine();
        //writefln(line, line.length);

        if (!XML_Parse(parser, cast(char*) line, line.length, done)) 
        {
            fprintf(stderr,
            "%s at line %d\n",
            XML_ErrorString(XML_GetErrorCode(parser)),
            XML_GetCurrentLineNumber(parser));
            return 1;
        }
    }

    XML_ParserFree(parser);
    return 0;
}

分享到:
评论

相关推荐

    php 使用expat方式解析xml文件操作示例

    另外,上述示例中还提到了一些在线XML/JSON互相转换工具,这类工具可以帮助开发者更便捷地进行数据格式转换工作,但与expat解析XML的具体操作无直接关联。 通过上述示例,我们可以了解到如何使用expat库在PHP中解析...

    c解析xml报文最精简的

    在C语言中解析XML,我们通常会使用如TinyXML、libXML2或expat这样的库。这些库提供了API来读取、遍历和解析XML文档。这里以TinyXML为例,讲解一个简单的解析过程: 1. **安装库**:首先,你需要下载并安装TinyXML库...

    解析XML的程序,可以读取节点属性。

    - `XmlFile.cpp`:通常包含XML解析器的实现代码,包括读取文件、解析XML结构、提取属性等功能。 - `XmlFile.h`:头文件,可能包含了类定义和相关的函数声明,供其他源文件引用以调用XML解析功能。 6. **扩展性**...

    纯C XML解析

    2. **Expat**:Expat是一个C编写的XML解析库,它使用SAX模型。通过注册回调函数,当解析器遇到XML元素时,会调用相应的回调函数。Expat提供了一种低级但高效的接口,适合处理大量XML数据。 四、C解析XML的基本步骤 ...

    perl解析xml

    本文将深入探讨如何使用Perl来解析XML文件,特别是通过XMLParser和Expat库。 首先,XMLParser是Perl中的一个模块,它提供了基于James Clark的Expat库的非回溯事件驱动的XML解析器。Expat是一个高效的C库,用于解析...

    expat-1.95.7.tar.gz

    Expat 是一个开源库,主要用于解析XML(可扩展标记语言)文档。它的全名是 "External Entity Processor and Parser",由 James Clark 开发,并在1998年首次发布。这个库是用C语言编写的,因此可以在多种操作系统上...

    expat-2.0.1.tar.gz

    - 许多编程语言的 XML 库都使用 Expat 作为其底层解析引擎,例如 Python 的 `xml.etree.ElementTree`。 6. **版本 2.0.1**: - 这个版本可能包含了 bug 修复、性能优化或其他功能增强,具体变化需要查看 release ...

    PHP XML Expat解析器知识点总结

    以下是一个简单的例子,展示如何使用PHP的Expat解析器处理XML文件: 首先,需要创建一个XML解析器实例,然后定义不同的事件处理器函数。这些函数会在XML文件的特定事件发生时被调用。例如,start函数会在开始元素...

    php解析xml 的四种简洁方法(附实例)_.docx

    Expat是一个非验证解析器,不处理文档类型定义(DTD),如果XML文档格式不正确,解析过程将以错误结束。因为它是事件驱动且不验证,所以Expat具有高效、适合Web应用程序的优点。然而,它的缺点是不适合需要动态调整...

    探析PHP中XML的应用.pdf

    使用PHP的expat解析器的基本步骤包括: 1. 创建XML解析器实例。 2. 定义处理XML事件的回调函数。 3. 打开XML文件并读取数据,解析XML文档。 4. 关闭文件并释放XML解析器资源。 例如,以下是一个简单的PHP处理XML...

    XML轻松学习手册--XML肯定是未来的发展趋势,不论是网页设计师还是网络程序员,都应该及时学习和了解

    可是一大堆的概念和术语往往让人望而生畏,很多朋友问我:XML到底有什么用,我们是否需要学习它?我想就我个人学习过程的心得和经验,写一篇比较全面的介绍文章。首先有两点是需要肯定的:  第一:XML肯定是未来的...

    Python 解析XML文件

    Python文件: 复制代码 代码如下:#parsexml.py #本例子参考自python联机文档,做了适当改动和添加 import xml.parsers.expat #控制打印缩进 level = 0 #获取某节点名称及属性值集合 def start_element(name, attrs):...

    secondlife源码分析(pdf版)

    - 详细解释了如何使用Expat库解析XML文件。 63. **使用LLXmlTree类来分析XML配置文件** - 介绍了如何利用`LLXmlTree`类来分析和管理XML配置文件。 64. **LLXmlTreeParser类生成XML树** - 详细分析了`...

    python标准库.pdf

    - xmllib模块:用于解析XML文件。 - xml.parsers.expat模块:提供对Expat XML解析器的接口。 - sgmllib、htmllib、htmlentitydefs模块:分别用于解析SGML、HTML和HTML实体。 - ConfigParser模块:用于解析配置...

    python标准库中文版PDF

    - expat模块:一个XML解析库的接口。 - sgmllib模块:SGML解析器。 - htmllib和formatter模块:HTML文档处理。 第6章关于邮件和新闻消息处理,其中包括: - rfc822模块:用于处理符合RFC 822标准的消息头。 - mime...

    log4c开发手册

    ##### 3.1 解析Log4C配置文件——依赖expat解析器 Log4C使用expat作为XML解析器来处理配置文件。因此,在构建Log4C之前,需要先安装expat库。这通常可以通过包管理器完成,例如在Linux上使用`apt-get install ...

    log4c配置向导.pdf

    Log4C 使用 expat 库来解析 XML 格式的配置文件。因此,在编译 Log4C 前需要确保已经安装了 expat。 - **安装 expat**:可以通过包管理器或者从源码编译安装。 - **配置编译选项**:在编译 Log4C 时,需要指定 expat...

    python standerd labrary中文版

    - 使用Expat XML解析器解析XML文档。 - 类如`xml.parsers.expat.ParserCreate()`。 - **sgmllib模块**(已废弃) - 提供解析SGML文档的基本框架。 - 类如`sgmllib.SGMLParser`。 - **htmllib模块**(已废弃) -...

Global site tag (gtag.js) - Google Analytics