使Xerces解析字符串而不是文件

时间:2011-01-14 12:29:40

标签: c++ xml parsing xerces-c

我知道如何使用XercesDOMParser从xml文件创建一个完整的dom:

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

嗯,这有用......但是如果我想要解析一个字符串怎么办?像

这样的东西
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

我正在使用版本3.查看AbstractDOMParser内部我看到parse方法及其重载版本,只解析文件。

如何从字符串中解析?

3 个答案:

答案 0 :(得分:20)

创建一个MemBufInputSourceparse

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

答案 1 :(得分:12)

使用以下XercesDOMParser :: parse()的重载:

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

传递一个MemBufInputSource:

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

答案 2 :(得分:1)

我是以另一种方式做的。如果这不正确,请告诉我原因。它似乎工作。 这就是解析所期望的:

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

所以你需要输入一个DOMLSInput而不是一个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);