⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 jxml.cpp

📁 可移植的xml库。已经在windows和linux上测试通过。只使用C++ Runtine
💻 CPP
字号:
//jxml.cpp

#include "xml.h"

static const char *js[]=
{
	"<?xml version='1.0'?>"
	"<stream:stream xmlns:stream='http://etherx.jabber.org/streams' xmlns='jabber:client' xml:lang='utf8' to='mc1.btobim.com' version='1.0'>"
	"<iq type='set'>"
	"<query xmlns='jabber:iq:auth'>"
	"<resource>upup</resource>"
	"<username>lee</username>"
	"<password>lee</password>"
	"</query>"
	"</iq>"
	"<iq type='get'>"
	"<query xmlns='jabber:iq:roster'/>"
	"</iq>"
	"<presence/>"
	"<presence type='unavailable'/>"
	"</stream:stream>",

	"<?xml version='1.0'?>"
	"<stream:stream xmlns:stream='http://etherx.jabber.org/streams' xmlns='jabber:client' from='mc1.btobim.com' version='1.0' id='hmt7lxhhitnw9z3ghjrx9dedrie312mipgpad7rv'>"
	"<stream:features xmlns:stream='http://etherx.jabber.org/streams'>"
	"<mechanisms xmlns='urn:ietf:params:xml:ns:xmpp-sasl'>"
	"<mechanism>DIGEST-MD5</mechanism>"
	"<mechanism>PLAIN</mechanism>"
	"</mechanisms>"
	"</stream:features>"
	"<iq xmlns='jabber:client' type='result'/>"
	"<iq xmlns='jabber:client' type='result'>"
	"<query xmlns='jabber:iq:roster'>"
	"<item name='william_kwan' subscription='both' jid='william_kwan@mc1.btobim.com'>"
	"<group>Hongkong</group>"
	"</item>"
	"<item name='ricky' subscription='both' jid='ricky@mc1.btobim.com'>"
	"<group>我的同事</group>"
	"</item>"
	"<item name='samuel_poon' subscription='both' jid='samuel_poon@mc1.btobim.com'>"
	"<group>Hongkong</group>"
	"</item>"
	"<item name='kit' subscription='both' jid='kit@mc1.btobim.com'>"
	"<group>我的好友</group>"
	"</item>"
	"<item name='jessie' subscription='both' jid='jessie@mc1.btobim.com'>"
	"<group>Hongkong</group>"
	"</item>"
	"<item name='mao' subscription='both' jid='mao@mc1.btobim.com'>"
	"<group>我的好友</group>"
	"</item>"
	"<item name='feng' subscription='both' jid='feng@mc1.btobim.com'>"
	"<group>陌生人</group>"
	"</item>"
	"<item name='jane' subscription='both' jid='jane@mc1.btobim.com'>"
	"<group>Hongkong</group>"
	"</item>"
	"<item name='york_mork' subscription='both' jid='york_mork@mc1.btobim.com'>"
	"<group>Hongkong</group>"
	"</item>"
	"<item name='angela' subscription='both' jid='angela@mc1.btobim.com'>"
	"<group>Hongkong</group>"
	"</item>"
	"<item name='guesthk2' subscription='both' jid='guesthk2@mc1.btobim.com'>"
	"<group>我的同事</group>"
	"</item><item name='baili' subscription='both' jid='baili@mc1.btobim.com'>"
	"<group>我的好友</group>"
	"</item>"
	"<item name='lei' subscription='both' jid='lei@mc1.btobim.com'>"
	"<group>陌生人</group>"
	"</item>"
	"<item name='autumn' subscription='both' jid='autumn@mc1.btobim.com'>"
	"<group>我的同事</group>"
	"</item>"
	"<item name='gzguest' subscription='both' jid='gzguest@mc1.btobim.com'>"
	"<group>我的同事</group>"
	"</item>"
	"<item name='kenneth' subscription='both' jid='kenneth@mc1.btobim.com'>"
	"<group>Hongkong</group>"
	"</item>"
	"<item name='sam' subscription='both' jid='sam@mc1.btobim.com'>"
	"<group>我的同事</group>"
	"</item>"
	"<item name='broadcaster' subscription='both' jid='broadcaster@mc1.btobim.com'>"
	"<group>NWTMT</group>"
	"</item>"
	"<item name='guesthk1' subscription='both' jid='guesthk1@mc1.btobim.com'>"
	"<group>我的好友</group>"
	"</item>"
	"<item name='tina' subscription='both' jid='tina@mc1.btobim.com'>"
	"<group>我的好友</group>"
	"</item>"
	"</query>"
	"</iq>"
	"<presence xmlns='jabber:client' to='lee@mc1.btobim.com/upup' from='sam@mc1.btobim.com/upup'>"
	"<x xmlns='jabber:x:delay' from='sam@mc1.btobim.com/upup' stamp='20050905T19:22:09'/>"
	"<watchfilm/>"
	"</presence>"
	"<presence xmlns='jabber:client' to='lee@mc1.btobim.com/upup' from='jessie@mc1.btobim.com/upup'>"
	"<x xmlns='jabber:x:delay' from='jessie@mc1.btobim.com/upup' stamp='20050905T15:42:04'/>"
	"<watchfilm/>"
	"</presence>"
	"</stream:stream>",
};

struct jc : public CXMLClient
{
	virtual int handleNode(CXMLParser& prs,CXMLNode *x)
	{
		int i = x->getDepth();
		if(x->getType()!=XNT_META && x->getFlags(XNF_CLOSE_TAG)) --i;
		for(;i>0;--i) fprintf(stderr," ");
		fprintf(stderr,"<");
		if(x->getType()!=XNT_META && x->getFlags(XNF_CLOSE_TAG)) fprintf(stderr,"/");
		fprintf(stderr,"%s",x->getNod());
		if(x->getType()!=XNT_META && x->getFlags(XNF_INDEP_TAG)) fprintf(stderr,"/");
		fprintf(stderr,">\n");
		x->save(stdout,0);
		x->free();
		fprintf(stdout,"\n");
		return XPS_CONTINUE;
	}
};

int main(int argc, char* argv[])
{
	jc c;
	int e = 0;
	CXMLParser prs;
	for(int i=0;i<sizeof(js)/sizeof(js[0]);++i)
	{
		prs.reset();
		prs.setChunkLevel(1);
		fprintf(stderr,"\nParsing XML stream %d\n",i);
		e = prs.saxParse(&c,js[i]);
		if(e)
		{
			fprintf(stderr,"error %d on LINE %d COL %d near [%s]\n",e,prs.errLine(),prs.errChar(),prs.errStr());
		}
		else fprintf(stderr,"\nParsed successfully!\n");
		fprintf(stdout,"\n");
	}
	return 0;
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -