Of course. I had forgotten that the DOMDocument class inherited from
the DOMNode class. Everything makes sense now.
Thanks for your help.
a
2008/10/30 Alberto Massari <[EMAIL PROTECTED]>:
> Hi Alain,
> the XML header is written when you write the entire document, not when you
> write the DTD and the root element separately. You should use
>
> theSerializer->write(doc, theOutput);
>
> Alberto
>
>
>
> Alain Leblanc wrote:
>>
>> Here's a sample program. It's short enough that I can put it here. I'm
>> not sure the attachment would make it through:
>>
>> =====================================================
>>
>> #include <iostream>
>> #include <xercesc/dom/DOM.hpp>
>> #include <xercesc/util/XMLString.hpp>
>> #include <xercesc/framework/LocalFileFormatTarget.hpp>
>>
>> XERCES_CPP_NAMESPACE_USE
>> using namespace std;
>>
>> // StrXML class copied from Xerces-2.8 distro.
>>
>> class StrXML
>> {
>> public :
>> //
>> -----------------------------------------------------------------------
>> // Constructors and Destructor
>> //
>> -----------------------------------------------------------------------
>> StrXML(const char* const toTranscode)
>> {
>> // Call the private transcoding method
>> fLocalForm = XMLString::transcode(toTranscode);
>> }
>>
>> ~StrXML()
>> {
>> XMLString::release(&fLocalForm);
>> }
>>
>>
>> //
>> -----------------------------------------------------------------------
>> // Getter methods
>> //
>> -----------------------------------------------------------------------
>> const XMLCh* utf16() const
>> {
>> return fLocalForm;
>> }
>> private :
>> //
>> -----------------------------------------------------------------------
>> // Private data members
>> //
>> // fLocalForm
>> // This is the local code page form of the string.
>> //
>> -----------------------------------------------------------------------
>> XMLCh* fLocalForm;
>>
>> };
>>
>>
>> int main (int , char **) {
>> XMLPlatformUtils::Initialize();
>> DOMImplementation *impl =
>> DOMImplementationRegistry::getDOMImplementation(StrXML("").utf16());
>> if (impl == NULL)
>> throw string("Implementation is NULL in create document.");
>>
>> // Create the document with one tag
>> DOMDocument *doc = impl->createDocument(0, StrXML("session").utf16(),
>>
>> impl->createDocumentType(StrXML("dummy").utf16(),
>> 0,
>> 0));
>>
>> DOMLSSerializer *theSerializer =
>> ((DOMImplementationLS*)impl)->createLSSerializer();
>> DOMLSOutput *theOutput = ((DOMImplementationLS*)impl)->createLSOutput();
>>
>> DOMConfiguration *configuration = theSerializer->getDomConfig();
>>
>> // Have a nice output
>> if (configuration->canSetParameter(XMLUni::fgDOMWRTFormatPrettyPrint,
>> true))
>> configuration->setParameter(XMLUni::fgDOMWRTFormatPrettyPrint, true);
>>
>> // Add the declaration?
>> if (configuration->canSetParameter(XMLUni::fgDOMXMLDeclaration, true))
>> configuration->setParameter(XMLUni::fgDOMXMLDeclaration, true);
>>
>>
>>
>> LocalFileFormatTarget *myFormTarget =
>> new LocalFileFormatTarget(StrXML("outfile.xml").utf16());
>> theOutput->setByteStream(myFormTarget);
>> if (doc->getDoctype() == NULL) {
>> cerr << "The doc type is null.\n";
>> exit(-1);
>> }
>> theSerializer->write(doc->getDoctype(), theOutput);
>> theSerializer->write(doc->getDocumentElement(), theOutput);
>> theOutput->release();
>> theSerializer->release();
>> XMLPlatformUtils::Terminate();
>>
>> }
>>
>>
>> =====================================================
>>
>>
>>
>
>