`
sofire
  • 浏览: 143968 次
  • 性别: 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;
}

分享到:
评论

相关推荐

    expat解析XML文件

    使用expat解析器解析XML文件,并显示在树控件。

    expatxml解析器.pdf

    expatxml解析器.pdf

    Expat xml解析库&&C++ Wrapper

    这是一个短小简洁的XML解析器(c方式),不过只支持流方式,同时提供来自www.codeproject.com的一个C++封装

    expat xml解析(C语言)

    expat xml解析(C语言),还没解决中文问题,希望有高手能帮忙做下UTF8转换的通用代码,不受操作系统的限制的!!

    如何让Expat支持中文XML

    刚刚学习使用Expat,却发现Expat并不支持中文。后来查找相关资料,得知Expat不支持gb2312编码格式,主要支持UTF-8编码格式。然而我们在程序中传递数据时,往往是用的gb2312格式文本的,于是想找出办法解决之,想到两...

    C++中使用Expat解析XML

    expat使用回调方式返回xml数据,解析器解析到一个element及其内部属性后,将调用事先设置好的函数,同样,当element结束和text结束后,也会分别调用对应的函数。  2.如何处理数据之间的包含关系  典型的方式是...

    让Expat支持中文XML示例代码

    刚学习Expat的时候,发现Expat并不支持中文XML的解析,因此对其进行了封装,内附编译好的可执行程序及测试用XML文件,命令行:ExpatSaxDemo demo.xml 详细信息参见:...

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

    主要介绍了php 使用expat方式解析xml文件操作,结合实例形式分析了PHP使用expat方式解析xml文件具体步骤与相关操作技巧,需要的朋友可以参考下

    expat xml解析器使用经典说明

    经典的XML解析工具expat的实用说明,无需参考其他文档即可快速的完成XML解析代码。

    VS2013编译的expat库(含32位和64位库)

    expat是一个由C语言编写的XML解析库。 James Clark创建了这个库,现在是制定XML标准的W3组织的技术leader。 现在的版本是2.0。 2.0开始就由Clark Cooper领导的开发组在 sourceforge.net 负责开发。

    Expat XML Parser:C中的快速XML解析器库-开源

    请注意,我们正在迁移到GitHub:https://github.com/libexpat/libexpat这是James Clark的C语言中的Expat XML解析器库。它是一个面向流的解析器,需要设置处理程序来处理结构。解析器在文档中发现的。 请注意,我们...

    XML函数——expat

    expat 是使用C所写的XML解释器,采用流的方式来解析XML文件,并且基于事件通知型来调用分析到的数据,并不需要把所有XML文件全部加载到内存里,这样可 以分析非常大的XML文件。由于expat库是由XML的主要负责人James ...

    EDA/PLD中的C++中使用Expat解析XML

    expat使用回调方式返回xml数据,解析器解析到一个element及其内部属性后,将调用事先设置好的函数,同样,当element结束和text结束后,也会分别调用对应的函数。  2.如何处理数据之间的包含关系  典型的方式是...

    XML解析器Ygloo-external-expat.zip

    Windows 用户应使用 expat_win32bin 开发包,其中包括预编译的库和可执行文件和源代码。 标签:Ygloo 分享 window._bd_share_config = { ...

    expat,c语言下好用的xml

    C语言下非常好用的xml解析器,可以直接嵌入到程序中,版本稳定。

    libexpat:Expat库:用C编写的快速流式XML解析器; 从SourceForge迁移到GitHub的过程中

    Expat版本2.2.10 这是Expat,一个解析XML的C库,由于1997年创立。Expat是面向流的XML解析器。 这意味着您在开始解析之前向解析器注册了处理程序。 当解析器在要解析的文档中发现关联的结构时,将调用这些处理程序。 ...

    fast_xml:基于Fast Expat的Erlang XML解析库

    fast_xml:基于Fast Expat的Erlang XML解析库

    expat-2.1.0 函数库 linux

    Expat是一个面向流的解析器。您注册的解析器回调(或handler)功能,然后开始搜索它的文档。当解析器识别该文件的指定的位置,它会调用该部分相应的处理程序(如果您已经注册的一个)。该文件被输送到解析器,会被...

Global site tag (gtag.js) - Google Analytics