You are viewing a plain text version of this content. The canonical link for it is here.
Posted to c-dev@xerces.apache.org by bu...@apache.org on 2004/01/16 11:15:03 UTC
DO NOT REPLY [Bug 26190] New: -
DOMWriter is not writing in UTF-8 encoding
DO NOT REPLY TO THIS EMAIL, BUT PLEASE POST YOUR BUG
RELATED COMMENTS THROUGH THE WEB INTERFACE AVAILABLE AT
<http://nagoya.apache.org/bugzilla/show_bug.cgi?id=26190>.
ANY REPLY MADE TO THIS MESSAGE WILL NOT BE COLLECTED AND
INSERTED IN THE BUG DATABASE.
http://nagoya.apache.org/bugzilla/show_bug.cgi?id=26190
DOMWriter is not writing in UTF-8 encoding
Summary: DOMWriter is not writing in UTF-8 encoding
Product: Xerces-C++
Version: 2.3.0
Platform: PC
OS/Version: Other
Status: NEW
Severity: Major
Priority: Other
Component: Utilities
AssignedTo: xerces-c-dev@xml.apache.org
ReportedBy: rajiff@rediffmail.com
i am trying to write the xml document in to a file in UTF-8 encoding here below
is the code i wrote for it, i do not understand whats wrong but its not
functioning as i expected, the file format after domwriter puts the output is
still ANSI, please let me know whats wrong
//// -------xe_domparser_demo.cpp
#include <xercesc/util/PlatformUtils.hpp>
#include <xercesc/dom/DOM.hpp>
#include <xercesc\util\XMLUniDefs.hpp>
#include <xercesc/framework/LocalFileFormatTarget.hpp>
// my error handler
#include <XP/XPErrorHandler.h>
#include <iostream.h>
#include <assert.h>
XERCES_CPP_NAMESPACE_USE
int main (int argc, char* argv[])
{
int result = 0;
if (argc < 2)
{
cout << "Usage " << argv[0] << " <XML File> " << endl;
return 0;
}
char* xmlFile = argv[1];
try
{
XMLPlatformUtils::Initialize();
}
catch (const XMLException& toCatch)
{
char* message = XMLString::transcode(toCatch.getMessage());
cout << "Error during initialization! " << endl
<< message << endl;
XMLString::release(&message);
return 1;
}
static const XMLCh gLS[] = { chLatin_L, chLatin_S, chNull };
DOMImplementationLS *domImplimentation =
DOMImplementationRegistry::getDOMImplementation(gLS);
DOMBuilder* domBuilder = domImplimentation->createDOMBuilder
(DOMImplementationLS::MODE_SYNCHRONOUS, NULL);
if ( domBuilder == NULL)
{
cout << "Error creating DOMBuilder, can't continue...!\n";
return -1;
}
XPErrorHandler* domErrorHandler = new XPErrorHandler
("xp_error.log"); // my error handler
domBuilder->setErrorHandler (domErrorHandler);
domErrorHandler->resetErrors();
//domBuilder->resetDocumentPool ();
domBuilder->setFeature(XMLUni::fgDOMNamespaces, true);
domBuilder->setFeature(XMLUni::fgXercesSchema, true);
domBuilder->setFeature(XMLUni::fgXercesSchemaFullChecking, true);
domBuilder->setFeature(XMLUni::fgDOMValidateIfSchema, true);
domBuilder->setFeature(XMLUni::fgDOMDatatypeNormalization, true);
DOMDocument* domDocument = NULL;
try
{
domDocument = domBuilder->parseURI(xmlFile);
if (domErrorHandler->GetErrorCount() > 0)
{
domErrorHandler->LogToFile ("Parsing compleeted with "
+ MakeString(domErrorHandler->GetErrorCount()) + " number of errors");
cout << "Parsed the file: " << xmlFile << " with " <<
domErrorHandler->GetErrorCount() << " number of errors \n";
cout << (domErrorHandler->GetErrors ()).data () << endl;
}
else
{
domErrorHandler->LogToFile ("Parsing compleeted
successfully without any error");
cout << "Parsed the file: " << xmlFile << " without any
parse erros \n";
}
}
catch (SAXException &saxException)
{
//Any SAX exception, possibly wrapping another exception.
char* message = XMLString::transcode(saxException.getMessage
());
cout << "SAX Exception in parsing : " << message << endl;
XMLString::release(&message);
return -1;
}
catch (XMLException &xmlException)
{
//An exception from the parser or client handler code.
char* message = XMLString::transcode(xmlException.getMessage
());
cout << "XML Exception in parsing : " << message << endl;
XMLString::release(&message);
return -1;
}
catch (DOMException &domException)
{
//A DOM exception
char* message = XMLString::transcode(domException.msg);
cout << "DOM Exception in parsing : " << message << endl;
XMLString::release(&message);
return -1;
}
char* specifiedEncoding = XMLString::transcode (domDocument-
>getEncoding ());
char* actualEncoding = XMLString::transcode (domDocument-
>getActualEncoding ());
if (specifiedEncoding == NULL)
cout << "No encoding specified " << endl;
else
cout << "Specified encoding: " << specifiedEncoding << endl;
if (actualEncoding == NULL)
cout << "Unable to find actual encoding " << endl;
else
cout << "The actual encoding: " << actualEncoding << endl;
// Get the root element of the document
DOMElement* element = domDocument->getDocumentElement();
cout << "Root element name: " << XMLString :: transcode (element-
>getTagName ()) << endl;
/*if (domErrorHandler->GetErrorCount() == 0)
{
DOMNodeList* nodeList = domDocument->getChildNodes ();
assert(nodeList);
//cout << "Length: " << nodeList->getLength () << endl;
for (int i =0; i < nodeList->getLength (); i++)
{
DOMNode* aNode = nodeList->item (i);
DisplayDOM (aNode);
}
}*/
DOMWriter* domWriter = domImplimentation->createDOMWriter ();
assert(domWriter);
XPErrorHandler* domWriterErrorHandler = new XPErrorHandler
("xp_writer_error.log");
domWriterErrorHandler->resetErrors();
domWriter->setErrorHandler (domWriterErrorHandler);
unsigned short* encoding = XMLString::transcode("UTF-16");
domWriter->setEncoding (encoding);
char* outPutFile = "MY_XE_XML_FILE.XML";
LocalFileFormatTarget localFileFormatTarget(outPutFile);
domWriter->writeNode(&localFileFormatTarget, *domDocument);
domWriter->release ();
domBuilder->release (); // call this before platform initializations
are terminated
XMLPlatformUtils::Terminate(); // This should be called in the end
return 0;
}
void DisplayDOM (DOMNode* node)
{
short nodeType = node->getNodeType ();
switch (nodeType)
{
case DOMNode::ELEMENT_NODE:
{
DOMElement* element = (DOMElement*)(node);
assert(element);
cout << "<" << XMLString::transcode (element-
>getTagName ());
DOMNamedNodeMap* attributeMap = element->getAttributes
();
assert(attributeMap);
for (int i = 0; i < attributeMap->getLength (); i++)
{
DOMAttr* attribute = (DOMAttr*)(attributeMap-
>item (i));
assert (attribute);
cout << " " << XMLString::transcode (attribute-
>getName())
<< "=\"" << XMLString::transcode
(attribute->getValue ()) << "\"";
}
cout << ">";
DOMNodeList* nodeList = element->getChildNodes ();
assert(nodeList);
int childNodesLength = nodeList->getLength ();
for (i =0; i < childNodesLength; i++)
{
DOMNode* aNode = nodeList->item (i);
DisplayDOM (aNode);
}
cout << "</" << XMLString::transcode (element-
>getTagName ()) << ">";
element = 0;
break;
}
case DOMNode::ATTRIBUTE_NODE:
{
DOMAttr* attr = (DOMAttr*)(node);
cout << "Attribute name: " << XMLString::transcode
(attr->getName()) << endl
<< "Attribute value: " << XMLString::transcode
(attr->getValue()) << endl;
break;
}
case DOMNode::TEXT_NODE:
{
DOMText* textNode = (DOMText*)(node);
try
{
char* textValue = XMLString::transcode(textNode-
>getTextContent ()); // now y the hell is it aborting here ????
if (textValue != NULL)
cout << textValue;
}
catch (DOMException& domException)
{
//A DOM exception
char* message = XMLString::transcode
(domException.msg);
cout << "DOM Exception in parsing : " <<
message << endl;
XMLString::release(&message);
}
break;
}
case DOMNode::CDATA_SECTION_NODE:
{
DOMCDATASection* domCdataSection = (DOMCDATASection*)
(node);
cout << "CDATA Text section's whole text: " <<
XMLString::transcode(domCdataSection->getWholeText ()) << endl;
break;
}
case DOMNode::ENTITY_REFERENCE_NODE:
break;
case DOMNode::ENTITY_NODE:
{
DOMEntity* entityNode = (DOMEntity*)(node);
cout << "Public Id: " << XMLString::transcode
(entityNode->getPublicId ()) << endl
<< "System Id: " << XMLString::transcode
(entityNode->getSystemId ()) << endl;
break;
}
case DOMNode::PROCESSING_INSTRUCTION_NODE:
break;
case DOMNode::COMMENT_NODE:
break;
case DOMNode::DOCUMENT_NODE:
break;
case DOMNode::DOCUMENT_TYPE_NODE:
break;
case DOMNode::DOCUMENT_FRAGMENT_NODE:
break;
case DOMNode::NOTATION_NODE:
break;
default:
break;
}
}
// end
---------------------------------------------------------------------
To unsubscribe, e-mail: xerces-c-dev-unsubscribe@xml.apache.org
For additional commands, e-mail: xerces-c-dev-help@xml.apache.org