You are viewing a plain text version of this content. The canonical link for it is here.
Posted to general@xerces.apache.org by Gilles FILIPPINI <Gi...@edf.fr> on 2000/02/18 10:34:26 UTC

[Xerces C++] Parsing from an istream (was: [Java|1.0.1] Parsing from StringBuffer...)

Jean Georges PERRIN (jgp@4js.com) wrote :
> 1/ Any idea about how to make that in C++ ?

I've set up a couple of C++ classes in order to be able to parse XML with Xerces C++ from an istream.
Is it possible to have them included into the distribution ?

- Gilles.

==========================================================
#include <util/BinInputStream.hpp>
#include <sax/InputSource.hpp>
#include <iostream>

class IStreamBinInputStream : public BinInputStream
{
	istream &       mIn;
public:
	IStreamBinInputStream(istream & in :
		BinInputStream(), mIn(in) { }
	virtual ~IStreamBinInputStream(void) { }
	virtual unsigned int curPos(void) const
		{ return mIn.tellg(); }
	virtual unsigned int readBytes(XMLByte * const buf, const unsigned int max)
		{ mIn.read(buf, max); return mIn.gcount(); }
};

class IStreamInputSource : public StdInInputSource
{
	istream &       mIn;
public:
	IStreamInputSource(istream & in) :
		InputSource("istream"), mIn(in) { }
	virtual ~IStreamInputSource(void) { }
	virtual BinInputStream * makeStream(void) const
		{ return new IStreamBinInputStream(mIn); }
};
==========================================================

Usage :
{
	...
	DOM_Parser		parser;
	IStreamInputSource	isis(myIStream);
	parser.parse(isis);
	...
}