Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/162.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 保存没有结束标记的IXMLDOM文档_C++_Xml_Msxml_Ixmldomdocument - Fatal编程技术网

C++ 保存没有结束标记的IXMLDOM文档

C++ 保存没有结束标记的IXMLDOM文档,c++,xml,msxml,ixmldomdocument,C++,Xml,Msxml,Ixmldomdocument,使用MSXML通过C++,当我调用 IXMLDOMBOD::Stave时,空XML元素将得到一个结束标记,像这样: <root> <child name="first"> </child> </root> 但我希望它保存为: <root> <child name="first" /> </root> 要做到这一点,我需要做些什么?如果没有子节点,DOM本身会这样做,但我不知道为

使用MSXML通过C++,当我调用<代码> IXMLDOMBOD::Stave时,空XML元素将得到一个结束标记,像这样:

<root>
    <child name="first">
    </child>
</root>

但我希望它保存为:

<root>
    <child name="first" />
</root>


要做到这一点,我需要做些什么?

如果没有子节点,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)));
}
#包括
bool FormatDOMDocument(IXMLDOMDocument*pDoc、IStream*pStream)
{
//创造作家
电脑打印机;
if(失败(pMXWriter.CoCreateInstance(uuuidof(MXXMLWriter),NULL,CLSCTX_ALL)))
{
返回false;
}
CComPtr pISAXContentHandler;
if(失败(pMXWriter.QueryInterface(&pISAXContentHandler)))
{
返回false;
}
首席执行官pISAXErrorHandler;
if(失败(pMXWriter.QueryInterface(&pISAXErrorHandler)))
{
返回false;
}
pISAXDTDHandler先生;
if(失败(pMXWriter.QueryInterface(&pISAXDTDHandler)))
{
返回false;
}
if(失败(pMXWriter->put_ommitxmlsdeclaration(VARIANT_FALSE))||
失败(pMXWriter->put_standalone(VARIANT_TRUE))||
失败(pMXWriter->put\u indent(VARIANT\u TRUE))||
失败(pMXWriter->put_编码(L“UTF-8”))
{
返回false;
}
诗篇阅读器;
if(失败(pSAXReader.CoCreateInstance(uuuidof(SAXXMLReader),NULL,CLSCTX_ALL)))
{
返回false;
}
if(失败(pSAXReader->putContentHandler(pISAXContentHandler))||
失败(pSAXReader->putDTDHandler(pISAXDTDHandler))||
失败(pSAXReader->putErrorHandler(pISAXErrorHandler))||
失败(pSAXReader->putProperty(
L“http://xml.org/sax/properties/lexical-handler,CComVariant(pMXWriter)))||
失败(pSAXReader->putProperty(
L“http://xml.org/sax/properties/declaration-handler,CComVariant(pMXWriter)))
{
返回false;
}
//执行写操作
返回成功(pMXWriter->put_输出(CComVariant(pStream)))&&
成功(pSAXReader->parse(CComVariant(pDoc));
}

如果没有子节点,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)));
}
#包括
bool FormatDOMDocument(IXMLDOMDocument*pDoc、IStream*pStream)
{
//创造作家
电脑打印机;
if(失败(pMXWriter.CoCreateInstance(uuuidof(MXXMLWriter),NULL,CLSCTX_ALL)))
{
返回false;
}
CComPtr pISAXContentHandler;
if(失败(pMXWriter.QueryInterface(&pISAXContentHandler)))
{
返回false;
}
首席执行官pISAXErrorHandler;
if(失败(pMXWriter.QueryInterface(&pISAXErrorHandler)))
{
返回false;
}
pISAXDTDHandler先生;
if(失败(pMXWriter.QueryInterface(&pISAXDTDHandler)))
{
返回false;
}
if(失败(pMXWriter->put_ommitxmlsdeclaration(VARIANT_FALSE))||
失败(pMXWriter->put_standalone(VARIANT_TRUE))||
失败(pMXWriter->put\u indent(VARIANT\u TRUE))||
失败(pMXWriter->put_编码(L“UTF-8”))
{
返回false;
}
诗篇阅读器;
if(失败(pSAXReader.CoCreateInstance(uuuidof(SAXXMLReader),NULL,CLSCTX_ALL)))
{
返回false;
}
if(失败(pSAXReader->putContentHandler(pISAXContentHandler))||
失败(pSAXReader->putDTDHandler(pISAXDTDHandler))||
失败(pSAXReader->putErrorHandler(pISAXErrorHandler))||
失败(pSAXReader->putProperty(
L“http://xml.org/sax/properties/lexical-handler,CComVariant(pMXWriter)))||
失败(pSAXReader->putProperty(
L“http://xml.org/sax/properties/declaration-handler,CComVariant(pMXWriter)))
{
返回false;
}
//执行写操作
返回成功(pMXWriter->put_输出(CComVariant(pStream)))&&
成功(pSAXReader->parse(CComVariant(pDoc));
}