六狼论坛

 找回密码
 立即注册

QQ登录

只需一步,快速开始

新浪微博账号登陆

只需一步,快速开始

搜索
查看: 49|回复: 0

用expat 库解析XML的学习例子

[复制链接]

升级  11.33%

17

主题

17

主题

17

主题

秀才

Rank: 2

积分
67
 楼主| 发表于 2013-1-27 05:58:11 | 显示全部楼层 |阅读模式
用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;}
您需要登录后才可以回帖 登录 | 立即注册 新浪微博账号登陆

本版积分规则

快速回复 返回顶部 返回列表