Thanks, I will take a closer look at those documents. I do have some difficulty understanding, but I will concentrate more on them instead of jumping around from reference to reference. Thanks for the information.
Raymond From: Gareth Reakes [mailto:[email protected]] Sent: Friday, December 17, 2010 1:39 AM To: [email protected] Subject: Re: EXTERNAL: Re: XML Declaration Hi Raymond, A good place to start are the docs, examples and FAQ. You need to release things you transcode as talked about here: http://xerces.apache.org/xerces-c/apiDocs-3/classXMLString.html#91b02742b80418fbc6c54b7dd353ad8c Other memory is managed at document level and you need to release that to get it back. Take a look at some common questions in the FAQ: http://xerces.apache.org/xerces-c/faq-parse-2.html and also examples like CreateDOMDocument where you will see easy easy ways to handle transcoding issues. Gareth On 17 Dec 2010, at 00:33, Steele, Raymond wrote: Thanks, I fixed the problem by moving the createDocument and the serializer->write outside of the loop. I am new to this and I am now struggling because I am not sure how to convert my c-style character arrays to the format the xerces accepts. In the below snippet, I was able to convert the char[2] c_id to a c++ string and then transcode that to set the text content. I am still not sure how that works and I am afraid I am not releasing it as I think I should. DOMElement* c_id = document->createElement(XMLString::transcode("c_id")); string new_c_id(struct_name[i].c_id, sizeof(struct_name[i].c_id)); c_id->setTextContent(XMLString::transcode(new_c_id.c_str())); rootElement->appendChild(c_id) If I have the following data: char c_type; (8-bits) which currently has the value of 'L'. How would I can I use that data to setTextContent of the c_type element below. DOMElement* c_type = document->createElement(XMLString::transcode("c_type")); string new_c_id; c_id->setTextContent(XMLString::transcode(new_c_id.c_str())); rootElement->appendChild(c_id) Raymond Raymond From: Gareth Reakes [mailto:[email protected]] Sent: Thursday, December 16, 2010 11:45 AM To: [email protected]<mailto:[email protected]> Subject: Re: EXTERNAL: Re: XML Declaration The second is not a valid XML document. An XML document can only have 1 root element. If you want them to appear is <S_RPS> tags then you can create another element as the root element and attach them all to that. Gareth On 16 Dec 2010, at 18:33, Steele, Raymond wrote: Gareth, Thanks for such a quick response. When I do as you suggested I receive this output: <?xml version="1.0" encoding="UTF-8" standalone="no" ?> <S_RPS> <c_id>AA</c_id> <c_id>AA</c_id> <c_id>AA</c_id> <c_id>AA</c_id> </S_RPS> However, I want to achieve this output: <?xml version="1.0" encoding="UTF-8" standalone="no" ?> <S_RPS> <c_id>AA</c_id> </S_RPS> <S_RPS> <c_id>AA</c_id> </S_RPS> <S_RPS> <c_id>AA</c_id> </S_RPS> <S_RPS> <c_id>AA</c_id> </S_RPS> <S_RPS> <c_id>AA</c_id> </S_RPS> Once again, thanks for the fast response. That's awesome. Raymond From: Gareth Reakes [mailto:[email protected]] Sent: Thursday, December 16, 2010 11:32 AM To: [email protected]<mailto:[email protected]> Subject: EXTERNAL: Re: XML Declaration Hi Raymond, It does that because you are creating multiple DOM documents and each one of those has an XML declaration. You do that here: DOMDocument* document = implement->createDocument(0, XMLString::transcode("S_RPS"), 0); If you move that line and the next: DOMElement* rootElement = document->getDocumentElement(); out of the loop then you will create 1 document with all the <c_id> elements inside inside a single <S_PRS> root element. Cheers, Gareth On 16 Dec 2010, at 18:17, Steele, Raymond wrote: Hello, Using Xerces 3.1.0-C++, I am creating a DOMDocument to stdout. I am trying to retrieve all the records in a .data file, which is in the form of a C struct. Each record has multiple records with many elements. When I run the application, the XML Declaration is repeated for each record. I do not like this behavior and cannot figure out how to stop it. Can someone shed some light? Thanks in advance. Here is a sample of the code. XMLPlatform::Initialize (); DOMImplmentation* implement = DOMImplementationRegistry::getDOMImplementation(XMLString:transcode("Core")); for ( int i=0; i<5; i++) { DOMDocument* document = implement->createDocument(0, XMLString::transcode("S_RPS"), 0); DOMElement* rootElement = document->getDocumentElement(); DOMElement* c_id = document->createElement(XMLString::transcode("c_id")); string new_c_id(struct_name[i].c_id, sizeof(struct_name[i].c_id)); c_id->setTextContent(XMLString::transcode(new_c_id.c_str())); rootElement->appendChild(c_id) DOMLSSerializer* serializer = (DOMImplementationLS*)implement)->createLSSerializer(); DOMLSOutput* output = ((DOMImplementationLS*)implement)->createLSOutput(); DOMConfiguration* config = serializer->getDomConfig(); config->setParameter(XMLuni::fgDOMWRTFormatPrettyPrint, true); StdOutFormatTarget* target = new StdOutFormatTarget(); output->setByteStream(target); serializer->write(document, output); delete target; output->release(); serializer->release(); } This will produce: <?xml version="1.0" encoding="UTF-8" standalone="no" ?> <S_RPS> <c_id>AA</c_id> </S_RPS> <?xml version="1.0" encoding="UTF-8" standalone="no" ?> <S_RPS> <c_id>AA</c_id> </S_RPS> <?xml version="1.0" encoding="UTF-8" standalone="no" ?> <S_RPS> <c_id>AA</c_id> </S_RPS> <?xml version="1.0" encoding="UTF-8" standalone="no" ?> <S_RPS> <c_id>AA</c_id> </S_RPS> <?xml version="1.0" encoding="UTF-8" standalone="no" ?> <S_RPS> <c_id>AA</c_id> </S_RPS> Why does it keep repeating the <?xml version="1.0" encoding="UTF-8" standalone="no" ?> ? Thanks! --------------------------------------------------------------------- To unsubscribe, e-mail: [email protected]<mailto:[email protected]> For additional commands, e-mail: [email protected]<mailto:[email protected]> -- Gareth Reakes, CTO WE7 - Great Music, Free +44-20-7117-0809 http://www.we7.com<http://www.we7.com/> "The music business is a cruel and shallow money trench, a long plastic hallway where thieves and pimps run free, and good men die like dogs. There's also a negative side. " - Hunter S. Thompson -- Gareth Reakes, CTO WE7 - Great Music, Free +44-20-7117-0809 http://www.we7.com<http://www.we7.com/> "The music business is a cruel and shallow money trench, a long plastic hallway where thieves and pimps run free, and good men die like dogs. There's also a negative side. " - Hunter S. Thompson -- Gareth Reakes, CTO WE7 - Great Music, Free +44-20-7117-0809 http://www.we7.com<http://www.we7.com/> "The music business is a cruel and shallow money trench, a long plastic hallway where thieves and pimps run free, and good men die like dogs. There's also a negative side. " - Hunter S. Thompson
