Xercesを作成すると、ファイルの代わりに文字列を解析します
質問
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
その解析方法とその過負荷バージョンは、ファイルを解析するだけです。
文字列から解析するにはどうすればよいですか?
解決
aを作成します MemBufInputSource
と parse
それ:
xercesc::MemBufInputSource myxml_buf(myxml.c_str(), myxml.size(),
"myxml (in memory)");
parser->parse(myxml_buf);
他のヒント
Xercesdomparser :: parse()の以下の過負荷を使用します。
void XercesDOMParser::parse(const InputSource& source);
MembufinputSourceを渡す:
MemBufInputSource src((const XMLByte*)myxml.c_str(), myxml.length(), "dummy", false);
parser->parse(src);
私はそれを別の方法でやっています。これが間違っている場合は、その理由を教えてください。うまくいくようです。これが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);
所属していません StackOverflow