Xercesを 2.8から 3.1へ更新したところ、DOMWriterが影も形も見つからない。
3.1では DOMLSOutputを使うらしいので書き換え。
元のコード
1978-0.cppDOMWriter* pSerializer = static_cast<DOMImplementationLS*>(pImpl)->createDOMWriter();
pSerializer->setFeature(XMLUni::fgDOMWRTFormatPrettyPrint, true);
LocalFileFormatTarget formTarget( filepath.c_str() );
pSerializer->writeNode(&formTarget, *pDoc);
delete pSerializer;
新しいコード
1978-1.cppDOMLSSerializer *writer = static_cast<DOMImplementationLS*>(pImpl)->createLSSerializer();
writer->getDomConfig()->setParameter(XMLString::transcode("format-pretty-print"), true);
DOMLSOutput* output = static_cast<DOMImplementationLS*>(pImpl)->createLSOutput();
LocalFileFormatTarget target(filepath.c_str());
output->setByteStream(&target);
writer->write(pDoc, output);
output->release();
writer->release();
書き換え内容自体はたいしたことないけど、普段から Xercesを使っているわけではなく悩んだのでメモ。
# PopRssというローカル POP3サーバに見える RSSリーダ、かなり昔にサポートを終了しているのだけどソースが公開されているので自分用のパッチを当てつつ使っているのであった。