2009-04-08 3 views

답변

1

DOM 노드 자체에 자식 노드가 없으면 왜 그런지 이유를 알지 못합니다. DOM 포인터에서 Pretty Print를 명시 적으로 호출하려는 경우.

#include <msxml2.h> 

bool FormatDOMDocument (IXMLDOMDocument *pDoc, IStream *pStream) 
{ 

    // Create the writer 
    CComPtr <IMXWriter> pMXWriter; 
    if (FAILED (pMXWriter.CoCreateInstance(__uuidof (MXXMLWriter), NULL, CLSCTX_ALL))) 
    { 
     return false; 
    } 
    CComPtr <ISAXContentHandler> pISAXContentHandler; 
    if (FAILED (pMXWriter.QueryInterface(&pISAXContentHandler))) 
    { 
     return false; 
    } 
    CComPtr <ISAXErrorHandler> pISAXErrorHandler; 
    if (FAILED (pMXWriter.QueryInterface (&pISAXErrorHandler))) 
    { 
     return false; 
    } 
    CComPtr <ISAXDTDHandler> pISAXDTDHandler; 
    if (FAILED (pMXWriter.QueryInterface (&pISAXDTDHandler))) 
    { 
     return false; 
    } 

    if (FAILED (pMXWriter ->put_omitXMLDeclaration (VARIANT_FALSE)) || 
     FAILED (pMXWriter ->put_standalone (VARIANT_TRUE)) || 
     FAILED (pMXWriter ->put_indent (VARIANT_TRUE)) || 
     FAILED (pMXWriter ->put_encoding (L"UTF-8"))) 
    { 
     return false; 
    } 

    CComPtr <ISAXXMLReader> pSAXReader; 
    if (FAILED (pSAXReader.CoCreateInstance (__uuidof (SAXXMLReader), NULL, CLSCTX_ALL))) 
    { 
     return false; 
    } 

    if (FAILED (pSAXReader ->putContentHandler (pISAXContentHandler)) || 
    FAILED (pSAXReader ->putDTDHandler (pISAXDTDHandler)) || 
    FAILED (pSAXReader ->putErrorHandler (pISAXErrorHandler)) || 
    FAILED (pSAXReader ->putProperty (
    L"http://xml.org/sax/properties/lexical-handler", CComVariant (pMXWriter))) || 
    FAILED (pSAXReader ->putProperty (
    L"http://xml.org/sax/properties/declaration-handler", CComVariant (pMXWriter)))) 
    { 
     return false; 
    } 

    // Perform the write 

    return SUCCEEDED (pMXWriter ->put_output (CComVariant (pStream))) && 
    SUCCEEDED (pSAXReader ->parse (CComVariant (pDoc))); 
}