用expat 库解析XML的学习例子

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

[code]
/**
* 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;
}

[/code]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值