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 vi...@lightningcast.com on 2003/03/25 17:54:29 UTC

help me get rid of some compile errors...

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:afomitchev@odixion.com]
> Sent: Tuesday, March 25, 2003 11:04 AM
> To: xerces-c-dev@xml.apache.org
> Subject: Re: Problem with accentuated letters
> 
> 
> Neil Graham wrote:
> 
> >Hi Andrei,
> >  
> >
> >>Curiously, when I use Xerces DOMParser for parse a XML 
> file, I can save
> >>it or print it with DOMWriter, the accentuated characters are quite
> >>present but if I reach the nodes, I don't have any more accents.
> >>    
> >>
> >
> >Good; so the parser is evidently doing the right thing.  That is, the
> >information must be available to the parser if it's capable 
> of serializing
> >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: xerces-c-dev-unsubscribe@xml.apache.org
> For additional commands, e-mail: xerces-c-dev-help@xml.apache.org
> 
> 

---------------------------------------------------------------------
To unsubscribe, e-mail: xerces-c-dev-unsubscribe@xml.apache.org
For additional commands, e-mail: xerces-c-dev-help@xml.apache.org


Re: help me get rid of some compile errors...

Posted by David J Craigon <da...@arabidopsis.info>.
The following code snippet should work:

#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



vinayak@lightningcast.com 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:afomitchev@odixion.com]
>>Sent: Tuesday, March 25, 2003 11:04 AM
>>To: xerces-c-dev@xml.apache.org
>>Subject: Re: Problem with accentuated letters
>>
>>
>>Neil Graham wrote:
>>
>>    
>>
>>>Hi Andrei,
>>> 
>>>
>>>      
>>>
>>>>Curiously, when I use Xerces DOMParser for parse a XML 
>>>>        
>>>>
>>file, I can save
>>    
>>
>>>>it or print it with DOMWriter, the accentuated characters are quite
>>>>present but if I reach the nodes, I don't have any more accents.
>>>>   
>>>>
>>>>        
>>>>
>>>Good; so the parser is evidently doing the right thing.  That is, the
>>>information must be available to the parser if it's capable 
>>>      
>>>
>>of serializing
>>    
>>
>>>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: xerces-c-dev-unsubscribe@xml.apache.org
>>For additional commands, e-mail: xerces-c-dev-help@xml.apache.org
>>
>>
>>    
>>
>
>---------------------------------------------------------------------
>To unsubscribe, e-mail: xerces-c-dev-unsubscribe@xml.apache.org
>For additional commands, e-mail: xerces-c-dev-help@xml.apache.org
>
>  
>





---------------------------------------------------------------------
To unsubscribe, e-mail: xerces-c-dev-unsubscribe@xml.apache.org
For additional commands, e-mail: xerces-c-dev-help@xml.apache.org


Re: help me get rid of some compile errors...

Posted by David J Craigon <da...@arabidopsis.info>.
The following code snippet should work:

#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



vinayak@lightningcast.com 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:afomitchev@odixion.com]
>>Sent: Tuesday, March 25, 2003 11:04 AM
>>To: xerces-c-dev@xml.apache.org
>>Subject: Re: Problem with accentuated letters
>>
>>
>>Neil Graham wrote:
>>
>>    
>>
>>>Hi Andrei,
>>> 
>>>
>>>      
>>>
>>>>Curiously, when I use Xerces DOMParser for parse a XML 
>>>>        
>>>>
>>file, I can save
>>    
>>
>>>>it or print it with DOMWriter, the accentuated characters are quite
>>>>present but if I reach the nodes, I don't have any more accents.
>>>>   
>>>>
>>>>        
>>>>
>>>Good; so the parser is evidently doing the right thing.  That is, the
>>>information must be available to the parser if it's capable 
>>>      
>>>
>>of serializing
>>    
>>
>>>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: xerces-c-dev-unsubscribe@xml.apache.org
>>For additional commands, e-mail: xerces-c-dev-help@xml.apache.org
>>
>>
>>    
>>
>
>---------------------------------------------------------------------
>To unsubscribe, e-mail: xerces-c-dev-unsubscribe@xml.apache.org
>For additional commands, e-mail: xerces-c-dev-help@xml.apache.org
>
>  
>





---------------------------------------------------------------------
To unsubscribe, e-mail: xerces-c-dev-unsubscribe@xml.apache.org
For additional commands, e-mail: xerces-c-dev-help@xml.apache.org


Re: help me get rid of some compile errors...

Posted by David N Bertoni/Cambridge/IBM <da...@us.ibm.com>.



> 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 ?

Was it really necessary to include an entire _unrelated_ email in your
post?

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);

Well I think that would tell you what's wrong.  Did you include the header
file for DOMElement?

Dave


---------------------------------------------------------------------
To unsubscribe, e-mail: xerces-c-dev-unsubscribe@xml.apache.org
For additional commands, e-mail: xerces-c-dev-help@xml.apache.org