IStream转MSXML DOMDocument

问题描述 投票:0回答:2

有没有一种简单的方法可以让我获取一个XML文档的IStream,然后将其加载到一个XMLDOMDocument(msxml)中?最好不要把流写到磁盘上。

c++ msxml istream
2个回答
1
投票

查看 这个 出! 更多例子.

std::istream 基于 ISequentialStream 实施例。链接. (ISequentialStream 的基类。IStream).

// 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


0
投票

你可能想用 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);
}

© www.soinside.com 2019 - 2024. All rights reserved.