How to write XML declaration with DOMWriter class Xerces-c

  • Thread starter christian.eickhoff
  • Start date
C

christian.eickhoff

Hello Everyone,

currently I am implementing a solution to write individually created
XML data to a file using c++ and Xerces-c 2.7.0 library. Therefore I
am making use of DOMWriter class which allows me to write the
according DOM tree to a given location using LocalFileFormatTarget().
Everything works fine except that I cant define and set a certain XML
declaration. The tutorial seems to provide an easy way to do this by
applying the setEncoding(), setVersion() or setStandalone() functions
to the according DOMDocument. But even after setting those parameters
as well as enabling the fgDOMXMLDeclaration() feature of the DOMWriter
nothing is written except one empty line at the beginning of the
document. What am I doing wrong???

The according code snippet is given below:

const XMLCh gLS[] = { chLatin_L, chLatin_S, chNull };
DOMImplementation* impl =
DOMImplementationRegistry::getDOMImplementation(gLS);
DOMWriter* theSerializer = ((DOMImplementationLS*)impl)-
createDOMWriter();
if (theSerializer->canSetFeature(XMLUni::fgDOMXMLDeclaration,true))
theSerializer->setFeature(XMLUni::fgDOMXMLDeclaration, true);

DOMDocument* doc;
doc = impl->createDocument(
0, // root element
namespaceURI.
XMLString::transcode("rootnode"),
// root element name
0); // document type
object(DTD).

doc->setEncoding(XMLString::transcode("UTF-8"));
doc->setVersion(XMLString::transcode("1.0"));

DOMNode* node = XMLwalker->getRoot(); //Set
Walker to Root node of the document
XMLFormatTarget *myFormTarget;
myFormTarget = new
LocalFileFormatTarget(written_XML_name.c_str()); //output to file
try{
theSerializer->writeNode(myFormTarget, *node);
}
catch.....

Any Help is appreciated as for my purposes the integration of the xml
declaration is compulsory!

Best regards,
Christian Eickhoff
 
S

spiff

DOMNode* node = XMLwalker->getRoot(); //Set
Walker to Root node of the document
XMLFormatTarget *myFormTarget;
myFormTarget = new
LocalFileFormatTarget(written_XML_name.c_str()); //output to file
try{
theSerializer->writeNode(myFormTarget, *node);

Hi Christian!

You get the XML root here with XMLwalker->getRoot(); but not the root
of the DOM tree. DOMDocument is actually the root of your DOM. Try
replacing writeNode(myFormTarget, *node) with writeNode(myFormTarget,
*doc).

Regards spiff
http://www.spycomponents.com
 
C

christian.eickhoff

Hi Christian!

You get the XML root here with XMLwalker->getRoot(); but not the root
of the DOM tree. DOMDocument is actually the root of your DOM. Try
replacing writeNode(myFormTarget, *node) with writeNode(myFormTarget,
*doc).

Regards spiffhttp://www.spycomponents.com

Hey spiff,

not the first time you helped me out!!! Thanks so much, good to have
versed experts like you! Now everything works fine =))..

With best regards,
Christian Eickhoff
 
S

spiff

not the first time you helped me out!!! Thanks so much, good to have
versed experts like you! Now everything works fine =))..

With best regards,
Christian Eickhoff

Christian,
fine that it is working now :)

spiff
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Members online

Forum statistics

Threads
473,769
Messages
2,569,579
Members
45,053
Latest member
BrodieSola

Latest Threads

Top