CommonC++ parse local xml file

Common C++的demo中有一个parse xml 文件的例子,但是这个例子在windows平台下,读取本地文件时候总是显示 xml 文件格式错误,这是因为这个例子中使用的类是从URLStream类和XMLStream类派生出来的,因此不适合读取本地文件。我们可以从stl 中的ifstream类和XMLStream类来编写一个分析本地xml文件的例子。具体的代码如下#include <cc++/common.h>
#include <iostream>
#include <cstdlib>
#include <fstream>

using namespace std;
using namespace ost;

class myXMLParser : public ifstream, public XMLStream
{
private:
bool out;
int read(unsigned char *buffer, size_t len)
{
ifstream::read((char *)buffer, len);
len = gcount();
return len;
}

void characters(const unsigned char *text, size_t len)
{
if(out){
cout <<text;
}
}
void startElement(const unsigned char *name, const unsigned char **attr)
{
if( strcmp((const char*)name, "CITY") == 0){
out = true;
}
else{
out = false;
}
}

void endElement(const unsigned char *name)
{
out =false;
}
public:
void Close(void)
{
ifstream::close();
}
myXMLParser(char* path): ifstream(path){
out =false;
}
};

int main(int argc, char **argv)
{
URLStream::Error status;

// url.setProxy("home.sys", 8000);
try
{
while(--argc)
{
++argv;
cout << "fetching " << *argv << endl;
myXMLParser xml(*argv);
/*
status = xml.get(*argv);
if(status)
{
cout << "failed; reason=" << status << endl;
xml.Close();
continue;
}
*/
cout << "Parsing..." << endl;
if(!xml.parse())
cout << "not well formed..." << endl;
xml.Close();
cout << ends;
}
}
catch(...)
{
cerr << "url " << *argv << " failed" << endl;
}
}
 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值