0

以下のコードに示すように、書式設定された XML ドキュメントを DOM オブジェクトから文字列に出力しようとしています。スクリーンショットでわかるように、dom->get_xml() メソッドは値を返しますが、MXXMLWriter->output は値を返しません。すべてのメソッド呼び出しは S_OK を返します。ここで何が問題になる可能性がありますか?

これが私のコードです:

CComPtr<IMXWriter> w;
HRESULT hr;
hr = w.CoCreateInstance(__uuidof(MXXMLWriter), NULL, CLSCTX_INPROC_SERVER);

hr = w->put_indent(VARIANT_TRUE);

CComPtr<ISAXXMLReader> rd;
hr = rd.CoCreateInstance(__uuidof(SAXXMLReader60), NULL, CLSCTX_INPROC_SERVER);

CComPtr<ISAXContentHandler> hc;
hr = w.QueryInterface<ISAXContentHandler>(&hc);
CComPtr<ISAXErrorHandler> he;
hr = w.QueryInterface<ISAXErrorHandler>(&he);
CComPtr<ISAXDTDHandler> hd;
hr = w.QueryInterface<ISAXDTDHandler>(&hd);

hr = rd->putContentHandler(hc);
hr = rd->putErrorHandler(he);
hr = rd->putDTDHandler(hd);
hr = rd->putProperty(L"http://xml.org/sax/properties/lexical-handler", CComVariant(w));
hr = rd->putProperty(L"http://xml.org/sax/properties/declaration-handler", CComVariant(w));

BSTR body = ::SysAllocStringLen(NULL, 1024);
ZeroMemory(body, 1024 * sizeof(OLECHAR));
CComVariant out(body);
w->put_encoding(CComBSTR(L"utf-8"));
hr = w->put_output(out);
hr = rd->parse(CComVariant(dom));

dom->get_xml(&xmlStr);

return std::wstring(xmlStr);

ここに画像の説明を入力

4

1 に答える 1

0

ドキュメントには、

出力は次のとおりです。

  • IStream インターフェイスの任意の実装。(結果のドキュメントは、提供された IStream に書き込まれます)。
  • 文字列。
  • DOMDocument オブジェクト。

output プロパティを DOMDocument オブジェクトに設定する方法の詳細については、SAX イベントからの DOMDocument オブジェクトの作成を参照してください。

このプロパティを空の値 (VT_EMPTY または " ") に設定すると、出力が内部文字列に返され、リセットされます。

ライターに文字列を埋めてもらいたいようです。そのため、空の文字列を使用してライターに内部バッファーを埋めるように指示し、プロパティ ゲッターを介して取得することをお勧めします。

代わりに、独自のバッファーを提供して埋めようとしますが、これはライターの宣伝されている動作です。

于 2012-11-30T07:56:24.247 に答える