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 Michael Xanadu <xa...@googlemail.com> on 2009/09/09 19:02:56 UTC
Whitespace - I'm going slighty mad!
I tryed to use Xerces 3 to read a xml file and I'm going slightly mad. I
have no problem to get the first node of my xml file, but xerces always
returns "#text" when I want to get its child node. I think the problem has
something to do with the so-called "whitespace". I tryed everything (dtd,
set features) without sucess. Please help and take a look at my code. I'm
under pressure. :-( (my xml file and dtd are in the attachement)
Regards, Michael
XMLCh tempStr[100];
XMLString::transcode("LS", tempStr, 99);
DOMImplementation *impl =
DOMImplementationRegistry::getDOMImplementation(tempStr);
DOMLSParser* parser =
((DOMImplementationLS*)impl)->createLSParser(DOMImplementationLS::MODE_SYNCHRONOUS,
0);
char* dtdFile = "d://projects//personal.dtd";
parser->loadGrammar(dtdFile, Grammar::DTDGrammarType, true);
// optionally you can set some features on this builder
if (parser->getDomConfig()->canSetParameter(XMLUni::fgDOMValidate,
true))
parser->getDomConfig()->setParameter(XMLUni::fgDOMValidate, true);
if (parser->getDomConfig()->canSetParameter(XMLUni::fgDOMNamespaces,
true))
parser->getDomConfig()->setParameter(XMLUni::fgDOMNamespaces, true);
if
(parser->getDomConfig()->canSetParameter(XMLUni::fgDOMDatatypeNormalization,
false))
parser->getDomConfig()->setParameter(XMLUni::fgDOMDatatypeNormalization,
false);
//here I messed aroung with some features without sucess
//parser->getDomConfig()->setParameter(XMLUni::fgXercesSchema, true );
//parser->getDomConfig()->setParameter(XMLUni::fgXercesSchemaFullChecking,
true );
//parser->getDomConfig()->setParameter(XMLUni::fgDOMElementContentWhitespace,
false);
//parser->getDomConfig()->setParameter(XMLUni::fgXercesLoadExternalDTD,
true);
//parser->getDomConfig()->setParameter(XMLUni::fgXercesLoadSchema, true
);
//parser->getDomConfig()->setParameter(XMLUni::fgXercesUseCachedGrammarInParse,
true);
ErrorHandler* errHandler = (ErrorHandler*) new HandlerBase();
parser->getDomConfig()->setParameter(XMLUni::fgDOMErrorHandler,
errHandler);
char* xmlFile = "d://projects//personal.xml";
xercesc_3_0::DOMDocument *doc = 0;
try
{
doc = parser->parseURI(xmlFile);
}
catch (const XMLException& toCatch) {
char* message = XMLString::transcode(toCatch.getMessage());
cout << "Exception message is: \n"<< message << "\n";
XMLString::release(&message);
}
catch (const DOMException& toCatch) {
char* message = XMLString::transcode(toCatch.msg);
cout << "Exception message is: \n"<< message << "\n";
XMLString::release(&message);
}
DOMElement *root = doc->getDocumentElement();
DOMNode* node = root->getFirstChild();
const XMLCh* ch = node->getNodeName(); //here I just get "#text"
parser->release();