首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >保存不带结束标签的IXMLDOMDocument

保存不带结束标签的IXMLDOMDocument
EN

Stack Overflow用户
提问于 2009-04-08 19:58:19
回答 1查看 1.6K关注 0票数 1

在通过C++使用MSXML时,当我调用IXMLDOMDocument::save时,空的XML元素将获得一个结束标记,如下所示:

代码语言:javascript
复制
<root>
    <child name="first">
    </child>
</root>

但我希望它保存为:

代码语言:javascript
复制
<root>
    <child name="first" />
</root>

我需要做些什么才能做到这一点呢?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2009-04-09 02:26:54

如果没有子节点,DOM本身就会这样做,但我不知道为什么在您的情况下,它会这样做。如果你想显式地调用DOM指针上的Pretty Print。

代码语言:javascript
复制
#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)));
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/731574

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档