You are viewing a plain text version of this content. The canonical link for it is here.
Posted to c-dev@xerces.apache.org by Gilles FILIPPINI <Gi...@edf.fr> on 2000/06/14 17:21:51 UTC

Réf. : Creating DOM tree using in memory buffer.

Hi Tony,

It's quite simple : just subclass BinInputStream and InputSource to handle your specific input.
Below is a piece of code I use to create a DOM document from a C++ input stream.

Hope this helps.

- Gilles.

//////////////////////////////////////////////////////

#include <util/BinInputStream.hpp>
#include <sax/InputSource.hpp>
#include <dom/DOM.hpp>
#include <util/XMLUni.hpp>
#include <iostream.h>

// ************************************************************************
// IStreamBinInputStream
// ************************************************************************

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

IStreamBinInputStream::IStreamBinInputStream(istream & in) :
        BinInputStream(), mIn(in)
{
}

IStreamBinInputStream::~IStreamBinInputStream(void)
{
}

unsigned int IStreamBinInputStream::curPos(void) const
{
        return mIn.tellg();
}

unsigned int IStreamBinInputStream::readBytes(XMLByte * const buf,

                                         const unsigned int max)
{
        mIn.read((char *)buf, max);
        return mIn.gcount();
}


// ************************************************************************
// IStreamInputSource
// ************************************************************************

class IStreamInputSource : public InputSource
{
        istream &       mIn;
public:
        IStreamInputSource(istream & in);
        virtual ~IStreamInputSource(void);
        virtual BinInputStream * makeStream(void) const;
};

IStreamInputSource::IStreamInputSource(istream & in) :
        InputSource("istream"), mIn(in)
{
}

IStreamInputSource::~IStreamInputSource(void)
{
}

BinInputStream * IStreamInputSource::makeStream(void) const
{
        return new IStreamBinInputStream(mIn);
}

// ************************************************************************
// Usage
// ************************************************************************

void MyClass::Load(istream & in)
{
        DOM_Document	doc;
        DOMParser		parser;
        IStreamInputSource	isis(in);
        parser.parse(isis);
        doc     = parser.getDocument();
        // ...
}





wuebben@lexis-nexis.com sur 14/06/2000 15:53:00
Pour :	xerces-c-dev@xml.apache.org@hub
cc :	 (ccc : Gilles FILIPPINI/SEPTEN/DE/EDFGDF/FR)
Objet :	Creating DOM tree using in memory buffer.

Using the DOMParser can I create a DOM tree using an in memeory buffer?
Currently I'm writing the buffer to a file and then re-reading the file
into a DOMParser.

Thanks
Tony Wuebben

---------------------------------------------------------------------
To unsubscribe, e-mail: xerces-c-dev-unsubscribe@xml.apache.org
For additional commands, e-mail: xerces-c-dev-help@xml.apache.org