19

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 メソッドとそのオーバーロードされたバージョン、解析ファイルのみが表示されます。

文字列からどのように解析できますか?

4

3 に答える 3

21

を作成し、次のことをMemBufInputSource行いますparse

xercesc::MemBufInputSource myxml_buf(myxml.c_str(), myxml.size(),
                                     "myxml (in memory)");
parser->parse(myxml_buf);
于 2011-01-14T12:38:01.027 に答える
13

XercesDOMParser :: parse()の次のオーバーロードを使用します。

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

MemBufInputSourceを渡します。

MemBufInputSource src((const XMLByte*)myxml.c_str(), myxml.length(), "dummy", false);
parser->parse(src);
于 2011-01-14T12:40:06.717 に答える
3

別の方法でやっています。これが間違っている場合は、その理由を教えてください。うまくいくようです。これは parse が期待するものです:

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

したがって、InputSource の代わりに DOMLSInput を入れる必要があります。

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);
于 2013-04-05T08:39:57.173 に答える