는 심지어 내 2 센트 7 년 후에 나는이 생각에 도착 여기
소스입니다 질문은 여전히 Visual C++의
#import
지시문과 네이티브 C++ COM 지원 라이브러리 (스마트 포인터 제공 및 오류 처리 캡슐화)를 사용하여 몇 줄의 코드로 간단하게 답변 할 가치가 있습니다.
대답은 대답과 마찬가지로 CXml
클래스에 맞지 않으므로 OP는 사용하지만 핵심 아이디어를 보여줍니다. 또한 msxml6
라고 가정합니다. 어떤 스트림
void PrettyWriteXmlDocument(MSXML2::IXMLDOMDocument* xmlDoc, IStream* stream)
{
MSXML2::IMXWriterPtr writer(__uuidof(MSXML2::MXXMLWriter60));
writer->encoding = L"utf-8";
writer->indent = _variant_t(true);
writer->standalone = _variant_t(true);
writer->output = stream;
MSXML2::ISAXXMLReaderPtr saxReader(__uuidof(MSXML2::SAXXMLReader60));
saxReader->putContentHandler(MSXML2::ISAXContentHandlerPtr(writer));
saxReader->putProperty(PUSHORT(L"http://xml.org/sax/properties/lexical-handler"), writer.GetInterfacePtr());
saxReader->parse(xmlDoc);
}
파일 스트림
에
예쁜 인쇄 당신이 IStream
인터페이스를 구현하여 자신을 쓸 수있는 파일 스트림 클래스의 작성을 필요로합니다.
나를 아도 스트림 클래스 활용되고 잘 작동하는 또 다른 간단한 해결책 :
#include <stdlib.h>
#include <objbase.h>
#include <comutil.h>
#include <comdef.h>
#include <comdefsp.h>
#import <msxml6.dll>
#import <msado60.tlb> rename("EOF", "EndOfFile") // requires: /I $(CommonProgramFiles)\System\ado
void PrettyWriteXmlDocument(MSXML2::IXMLDOMDocument* xmlDoc, IStream* stream);
void PrettySaveXmlDocument(MSXML2::IXMLDOMDocument* xmlDoc, const wchar_t* filePath);
int wmain()
{
CoInitializeEx(nullptr, COINIT_MULTITHREADED);
try
{
MSXML2::IXMLDOMDocumentPtr xmlDoc(__uuidof(MSXML2::DOMDocument60));
xmlDoc->appendChild(xmlDoc->createElement(L"root"));
PrettySaveXmlDocument(xmlDoc, L"xmldoc.xml");
}
catch (const _com_error&)
{
}
CoUninitialize();
return EXIT_SUCCESS;
}
// assume definitions of PrettyWriteXmlDocument and PrettySaveXmlDocument go here
에 오신 것을 환영합니다 :
함께
가장 단순한
main
기능을 붙인 행동이 보여줍니다 지옥에. 6 가지 버전과 여러 언어에 대한 꼼꼼한 문서입니다. 대부분이 함께 작업하는 다른 버전입니다. 매크로 사용과 관련한 Microsoft의 사용 예제, 인류에 대한 모든 종류의 범죄. 나는 스타일 시트를 작성하고 스타일 시트를 사용하여 transformNodeToObject 함수를 적용하는 길로 가고있다. 불행히도 문서화되지 않은 예외가 던져지고있다. ... – Owl