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



Reply via email to