实时高效的大型系统,准备采用XML作为通讯载体,传输的XML文件都是从内存缓冲区读取和发送。
就是说,接收时收到一串Buf内容(XML格式),然后直接在内存中解析,目前采用的TinyXML,这个接收我通过Parse直接搞定了并解析处理
但是有个问题不好处理,是在发送时,我可能根据一些数据直接在内存中生成了一个TxmlDocument对象,但这时我要通过Socket直接发送出去时,必须要发送XML文件内容,但这个XML文件内容不知道从哪儿取,有一个办法那就是先将TxmlDocument->SaveFile()后在读取是可以,但这在一个实时高负荷的系统中是完全不能忍受的?问题实质就是如何通过一个内存TxmlDocument对象直接得到其XML文件内容写入一个内存Buf?不能通过写入硬盘再读取到Buf中的办法!求助大家,我仔细看了下TinyXML的类接口,没有直接的接口。
谢谢!

解决方案 »

  1.   

    你把SaveFile中的代码修改一下不就可以SaveToBuf了?
      

  2.   

    TiXmlPrinter:输出到一个std::string或者内存缓冲区中。C++风格输出:
    基于std::ostream
    operator<<生成压缩过的输出,目的是为了便于网络传输而不是为了可读性。它可能有些慢(可能不会),这主要跟你系统上ostream类的实现有关。无法容忍格式错误的XML:此文档只能包含一个根元素。另外根级别的元素无法以流形式输出。C++风格输入:
    基于std::istream
    operator>>从流中读取XML使其可用于网络传输。通过些小技巧,它知道当XML文档读取完毕时,流后面的就一定是其它数据了。TinyXML总假定当它读取到根结点后XML数据就结束了。换句话说,那些具有不止一个根元素的文档是无法被正确读取的。另外还要注意由于STL的实现和TinyXML的限制, operator>>会比Parse慢一些。 
      

  3.   

    今天下午才下载TinyXML简单试了一下。To sjdev:
       SaveFile是一个遍历,分段写入的,需要重载从XMLBase类继承的诸多类的方法,不是不可以,该很多地方,怕引起其它问题,主要是没有太多时间来研究和验证,而且感觉有点别扭To captain_x:
        不知道您所说的具体是怎么用,我目前只能通过XMLDocument类的Accept(XMLPrint*)后,输出XMLPrint的CSTR来得到文件内容,跟原来相比缺少了‘\n’,不是很好看,但能解析,如果有更好的办法,请不吝指教!
      

  4.   

    跟踪学习,楼主在搞JABBER 的东西?
      

  5.   

    TiXmlElement *pRootElement = myDocument->RootElement;std::string str;
    str << *pRootElement;
      

  6.   

    GetText 好像没有对应的SetText函数为什么?我要修改text怎么办?