Faire en sorte que Xerces parsing une chaîne au lieu d’un fichier

Je sais comment créer un dom complet à partir d’un fichier xml en utilisant simplement XercesDOMParser:

xercesc::XercesDOMParser parser = new xercesc::XercesDOMParser(); parser->parse(path_to_my_file); parser->getDocument(); // From here on I can access all nodes and do whatever i want 

Eh bien, ça marche … mais si je voulais parsingr une chaîne? Quelque chose comme

 std::ssortingng myxml = "..."; xercesc::XercesDOMParser parser = new xercesc::XercesDOMParser(); parser->parse(myxml); parser->getDocument(); // From here on I can access all nodes and do whatever i want 

J’utilise la version 3. En regardant dans AbstractDOMParser je vois que la méthode d’parsing et ses versions surchargées ne traitent que les fichiers.

Comment puis-je parsingr une chaîne?

    Créez un MemBufInputSource et MemBufInputSource cela:

     xercesc::MemBufInputSource myxml_buf(myxml.c_str(), myxml.size(), "myxml (in memory)"); parser->parse(myxml_buf); 

    Utilisez la surcharge suivante de XercesDOMParser :: parse ():

     void XercesDOMParser::parse(const InputSource& source); 

    en lui passant un MemBufInputSource:

     MemBufInputSource src((const XMLByte*)myxml.c_str(), myxml.length(), "dummy", false); parser->parse(src); 

    Je le fais d’une autre manière. Si cela est incorrect, dites-moi pourquoi. Cela semble fonctionner. C’est ce que parse attend:

     DOMDocument* DOMLSParser::parse(const DOMLSInput * source ) 

    Il faut donc mettre un DOMLSInput au lieu d’un InputSource:

     xercesc::DOMImplementation * impl = xercesc::DOMImplementation::getImplementation(); xercesc::DOMLSParser *parser = (xercesc::DOMImplementationLS*)impl)->createLSParser(xercesc::DOMImplementation::MODE_SYNCHRONOUS, 0); xercesc::DOMDocument *doc; xercesc::Wrapper4InputSource source (new xercesc::MemBufInputSource((const XMLByte *) (myxml.c_str()), myxml.size(), "A name"); parser->parse(&source);