c++ xml parsing xerces-c

c++ - Haciendo que Xerces analice una cadena en lugar de un archivo



xml parsing (3)

Cree un MemBufInputSource y MemBufInputSource que:

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

Sé cómo crear un dom completo a partir de un archivo xml usando 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

Bueno, eso funciona ... pero ¿y si quisiera analizar una cadena? Algo como

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

Estoy usando la versión 3. Mirando dentro de AbstractDOMParser veo que el método de análisis y sus versiones sobrecargadas, solo analizan archivos.

¿Cómo puedo analizar desde una cadena?


Lo estoy haciendo de otra manera. Si esto es incorrecto, por favor dime por qué. Parece funcionar. Esto es lo que el análisis espera:

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

Por lo tanto, debe colocar un DOMLSInput en lugar de 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);


Utilice la siguiente sobrecarga de XercesDOMParser :: parse ():

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

pasándole un MemBufInputSource:

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