Я пытаюсь написать файл XML, используя MSXML4. Он работает нормально, за исключением случаев, когда у меня есть элемент данных с завершающим пробелом, который должен быть сохранен.
Учитывая следующий код для вставки нового элемента:
const _bstr_t k_Parent (ToBSTR("ParentNode"));
const _bstr_t k_Child (ToBSTR("ChildNode"));
const _bstr_t k_Data (ToBSTR("DataWithTrailingSpace "));
const _bstr_t k_Namespace (ToBSTR("TheNameSpace"));
MSXML2::IXMLDOMDocument2Ptr m_pXmlDoc;
m_pXmlDoc->async = VARIANT_FALSE;
m_pXmlDoc->validateOnParse = VARIANT_FALSE;
m_pXmlDoc->resolveExternals = VARIANT_FALSE;
m_pXmlDoc->preserveWhiteSpace = VARIANT_TRUE;
MSXML2::IXMLDOMNodePtr pElement = m_pXmlDoc->createNode(NODE_ELEMENT, k_Child, k_Namespace);
MSXML2::IXMLDOMNodePtr pParent = m_pXmlDoc->selectSingleNode(k_Parent);
pElement->put_text (k_Data);
MSXML2::IXMLDOMNodePtr pNewChild = pParent->appendChild(pElement);
Если я проверю «pNewChild-> text», текст все еще будет содержать завершающий пробел. Когда я пытаюсь записать его в файл:
std::string xml (static_cast<std::string>(m_pXmlDoc->xml));
std::ofstream file("output.xml");
file << xml << std::endl;
file.flush();
file.close();
Вывод:
<ParentNode>
<ChildNode>DataWithTrailingSpace</ChildNode>
</ParentNode>
Вместо (обратите внимание на дополнительный пробел за «DataWithTrailingSpace»):
<ParentNode>
<ChildNode>DataWithTrailingSpace </ChildNode>
</ParentNode>
Я не могу понять, в какой момент пространство в конце становится лишним.
Может ли кто-нибудь рассказать, где это может происходить, и как я могу это исправить?