【问题标题】:IStream to MSXML DOMDocumentIStream 到 MSXML DOMDocument
【发布时间】:2013-06-13 20:16:07
【问题描述】:

我是否有一种简单的方法来获取 XML 文档的 IStream,然后将其加载到 IXMLDOMDocument (msxml) 中?最好不要将流写入磁盘。

【问题讨论】:

    标签: c++ msxml istream


    【解决方案1】:

    检查thisMore example.

    基于ISequentialStreamstd::istream 实现示例:link。 (ISequentialStreamIStream 的基类)。

    // VARIANT_TRUE != TRUE !!!!!!!!!!!
    VARIANT_BOOL retval = VARIANT_TRUE;
    // document object created by CoCreateInstance
    IXMLDOMDocument* xml_doc;
    // own ISequentialStream/IStream instance (like example)
    ISequentialStream* streamaddress;
    // variant: could be IStream, ISequentialStream or IPersistStream
    VARIANT xmlSource;
    // variant init
    VariantInit(&xmlSource);
    // your object is an IUnknown interface
    xmlSource.vt = VT_UNKNOWN;
    // set its address
    xmlSource.punkVal = streamaddress;
    // load XML from stream
    if ( ( xml_doc->load(xmlSource,&retval) == S_OK ) && ( retval == VARIANT_TRUE ) ) {
      // done
    }
    

    VARIANT_TRUE

    【讨论】:

      【解决方案2】:

      你可能想使用SHCreateMemStream:

      bool load_xml_string(IXMLDOMDocument* xml_doc, std::string const& xml_string){
        CComPtr<IStream> stream;
        stream.Attach(SHCreateMemStream((const BYTE*)xml_string.c_str(),
                                        (UINT)xml_string.size()));
        VARIANT_BOOL load_result = VARIANT_FALSE;
        return (xml_doc->load(CComVariant(static_cast<IUnknown*>(&stream)), &load_result) == S_OK &&
                load_result == VARIANT_TRUE);
      }
      
      

      【讨论】:

        猜你喜欢
        • 2017-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-01-01
        • 2013-09-16
        • 2011-03-25
        • 2016-06-10
        • 2015-09-18
        相关资源
        最近更新 更多