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