Apache Xerces Xml parser



  • Hallo!

    Um den Wert eines Elementes zu lesen benutze ich folgenden Code:

    if(   pxNode->getNodeType() == DOMNode::ELEMENT_NODE 
             && pxNode->getChildNodes()->getLength() == 1 
             && pxNode->getFirstChild()->getNodeType() == DOMNode::TEXT_NODE ) 
          { 
    
             ConvertToString( pxNode->getFirstChild()->getNodeValue() 
                           , &xTempValue ) ; 
          }
    
    void ConvertToString( const XMLCh* pxIn, string *pxOut ) 
    { 
       char* ReadText = XMLString::transcode(pxIn ); 
    
       *pxOut = ReadText ; 
    
       XMLString::release(&ReadText); 
    }
    

    Den code der Funktion ConvertToString habe ich aus den Xerces-Beispielen kopiert.

    Funktioniert alles gut, es gibt nur ein Problem:

    Wenn im gelesenen Text zum Entity-Bereich gehörender Text ist, wird dieser umgewandelt in "richtigen" Text. Z.B. :

    in Xml: & g t ;
    gelesen: >

    Das will ich aber nicht, ich möchte den Text lesen so wie er in der Xml-Datei steht.

    Gibt es eine Möglichkeit diese "Umwandlung" auszuschalten?



  • warum den umweg ueber das transcode gehen ?
    der std::string frisst doch "getNodeValue" soweit ich weiss direkt problemlos



  • Meinst Du so?

    string xTempValue = pxTempNode->getFirstChild()->getNodeValue() ;

    Dann bekomme ich folgende Compilermeldung:

    error C2679: binary '=' : no operator defined which takes a right-hand operand of type 'const unsigned short *' (or there is no acceptable conversion)

    Ich benutze Visual C++ 6.0.



  • hmm - dann wars doch nicht
    manchmal half auch die funktion append #gg


Anmelden zum Antworten