#include <xercesc/dom/DOM.hpp>
using namespace xercesc;
int foo() { DOMNode *anode; if (anode->getNodeType()==DOMNode::ELEMENT_NODE) { DOMElement *elem= (DOMElement *)anode; } else { // Oh dear }
}
This tatic has worked for me in the past. It might very well be wrong though- I'd love to know more.
David
[EMAIL PROTECTED] wrote:
I am wasting way too much time integrating my app with the xerces parser. To add to my woes, I am facing compiler different compiler errors for different projects that use the same xerces code... :-) Can someone help me fix these errors the easy way ?
I am trying..
DOMNode *n // it is a valid domnode.
// the following statement fails. error is "2440: 'static_cast' : cannot convert from 'class xercesc_2_2::DOMNode *' to 'class xercesc_2_2::DOMElement *' Types pointed to are unrelated; conversion requires reinterpret_cast, C-style cast or function-style cast"
DOMElement *de = static_cast<DOMElement *>(n);
// this fails too, error is "C2027: use of undefined type 'DOMElement'" DOMElement *de = reinterpret_cast<DOMElement *>(n);
From the class diagrams, I believe that DOMNode inherits from DOMElement, and others..
So, where am I screwing up and whats the best fix ?
I have the libs and includes and straight...
-Vinayak.
-----Original Message----- From: "Andreï V. FOMITCHEV" [mailto:[EMAIL PROTECTED] Sent: Tuesday, March 25, 2003 11:04 AM To: [EMAIL PROTECTED] Subject: Re: Problem with accentuated letters
Neil Graham wrote:
Hi Andrei,file, I can save
Curiously, when I use Xerces DOMParser for parse a XML
of serializingit or print it with DOMWriter, the accentuated characters are quiteGood; so the parser is evidently doing the right thing. That is, the
present but if I reach the nodes, I don't have any more accents.
information must be available to the parser if it's capable
it correctly. So the question becomes: how are you"reaching" the nodes
and, as importantly, how are you displaying the result?//parse problem
//it is necessary to add to what follows the management of the exceptions
XercesDOMParser * parser = new XercesDOMParser;
parser->parse(xml_file_name);
XMLCh * tempStr [100];
DOMDocument * document = parser->getDocument();
XMLString::transcode("*", (XMLCh *) tempStr, 99);
DOMNodeList * laListe = document->getElementsByTagName((const XMLCh*)tempStr);
DOMNode * noeud_courant;
for(XMLSize_t i = 0; i < laListe->getLength(); i++)
{
noeud_courant = laListe->item(i);
//on ne peut pas utiliser tempStr car la taille du contenu peur être superieur à 99
char * une_fuite_de_memoire_colmate = XMLString::transcode(noeud_courant->getNodeName());
String nom_courant (une_fuite_de_memoire_colmate);
delete [] une_fuite_de_memoire_colmate;
String * contenu_courant = XML::getTextContent(noeud_courant);
//I lost the contents
}
/*!
return "char*" of the text content of the node node
*/
String * XML::getTextContent(DOMNode * node)
{
String * res = new String("");
DOMNodeList * laListe = node->getChildNodes();
DOMNode * noeud_courant;
for(XMLSize_t i = 0; i < laListe->getLength(); i++)
{
noeud_courant = laListe->item(i);
// NodeType
switch(/*(DOMNode::NodeType)*/noeud_courant->getNodeType())
{
case DOMNode::ELEMENT_NODE:
{
printf("ELEMENT_NODE ");
String * tampon = getTextContent(noeud_courant);
*res += *tampon;
delete tampon;
break;
}
case DOMNode::ATTRIBUTE_NODE:
//pas de contenu texte ...
break;
case DOMNode::TEXT_NODE:
{
char * tampon = XMLString::transcode(noeud_courant->getNodeValue());
printf("tampon = '%s'\n", tampon);
if(tampon != NULL)
*res += String(tampon);
delete [] tampon;
break;
}
case DOMNode::CDATA_SECTION_NODE:
case DOMNode::ENTITY_REFERENCE_NODE:
case DOMNode::ENTITY_NODE:
case DOMNode::PROCESSING_INSTRUCTION_NODE:
case DOMNode::COMMENT_NODE:
case DOMNode::DOCUMENT_NODE:
case DOMNode::DOCUMENT_TYPE_NODE:
case DOMNode::DOCUMENT_FRAGMENT_NODE:
case DOMNode::NOTATION_NODE:
default :
printf("oups. %d node\n", noeud_courant->getNodeType());
break;
}
}
return res;
}
Do I have errors in the code?
--
Andreï V. FOMITCHEV [Quand faut-il arrêter l'informatique]
Software R&D Engineer [Lorsque, dans un kilo, on trouve 1024 grammes]
Odixion, FRANCE
--------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]
--------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]
--------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]