我正在处理潜在的“大型”xml文件,其中我的应用程序只关心文件中包含的非常小的数据子集。所以我希望避免将整个xml文档加载到DOM中。
我已成功使用Apache Xerces C ++和Sax2 api直接从zip存档中包含的xml文件中提取数据,使用xercesc::BinInputStream
和xercesc::InputSource
的自定义实现
但是,现在我们要对xml文档中的一小部分节点应用修改(读取原始文件,并将更改应用到新zip存档中的新xml文件中)。我希望避免将整个文档加载到DOM中,只是为了修改几个节点。
利用我已经用SAX2完成的工作会很好,但看起来SAX2 api主要是围绕阅读文档。我可以处理所有SAX2事件,并在新文件出现时将信息写入新文件,但是我很难找到xerces api功能,例如,有助于处理xml实体(我真的不想重写)例如xml实体处理自己!)和其他编码问题。
我还注意到xerces提供了一个xercesc::BinOuputStream
(这似乎是我想要从中直接序列化到zip存档的内容),但是我还没有找到一个我可以找到的地方将这样的自定义输出流插入xerces api。我也无法为xercesc::InputSource
找到相应的输出模拟。
xerces c ++是否提供了以流式方式编写xml文档的任何本机功能?