Freimann, Mario wrote:
After searching google and looking into the xerces example I realized that for 
stdout I have to use a StdOutFormatTarget. The xml is written to stdout now. 
Unfortunately the xerces parser doesn't escape all xml special characters. So I 
have two questions. Any help is really appreciated.

- Why isn't the umlaut ü converted to ü?

As you can see from the XML PI printed in stdout, the serializer is writing UTF-8 symbols; you should force the encoding that you know is being used by the shell.

- Why isn't the quotation sign converted to " by the transcoder?

Quotation signs need to be escaped only inside attribute content (and only when it is also used as delimiter for the content itself).

Alberto


The OS is still Red Hat Enterprise, Xerces 2.7.


[[output (ü is distorted by shell?)]]

debug xData [München -> <- "'], eaten [16], charSizes [], xRet [16], xOut [M]
<?xml version="1.0" encoding="UTF-8" standalone="no" ?><xtestroot><test>München -&gt; &lt;- 
"'</test></xtestroot>


[[code]]

utf8Transcoder = 
XMLPlatformUtils::fgTransService->makeNewTranscoderFor("ISO-8859-1", 
failReason, 16*1024);
DOMImplementation* _impl2 = 
DOMImplementationRegistry::getDOMImplementation(XMLString::transcode("LS"));
DOMDocument* _doc2 = _impl2->createDocument(0, 
XMLString::transcode("xtestroot"), 0);
DOMElement* _rootElem2 = _doc2->getDocumentElement();

//convert content
char* xData = "München -> <- \"'";
XMLCh* xOut = new XMLCh[ strlen(xData) * 6 + 1 ];
int xRet = utf8Transcoder->transcodeFrom( (const XMLByte*)xData, strlen(xData), 
xOut, strlen(xData) * 6 + 1, eaten, charSizes );
printf("debug xData [%s], eaten [%d], charSizes [%s], xRet [%d], xOut [%s]\n", 
xData, eaten, charSizes, xRet, xOut );

//create xml
DOMElement* nextNode2 = _doc2->createElement(XMLString::transcode("test"));
_rootElem2->appendChild(nextNode2);
DOMText* nodeData2 = _doc2->createTextNode( xOut );
nextNode2->appendChild(nodeData2);

//write xml
DOMWriter* theSerializer2 = ((DOMImplementationLS*)_impl2)->createDOMWriter();
XMLFormatTarget *myFormatTarget = new StdOutFormatTarget();
theSerializer2->writeNode( myFormatTarget, *_doc2 );
printf("\n");fflush(stdout);


With kind regards,

Mario Freimann


Reply via email to