如何为每个 XML 节点添加换行符?

How to add a line break to each XML node?

如何为每个 XML 子节点添加换行符以便输出看起来格式化?

模板文件包含 <Faults></Faults> 标签。现在我想在此节点内插入一个换行符。

C++代码:

_di_IXMLNode nodeFault = NULL;
IXMLNode *m_pRootNode = FormMain->GetBBReportTXMLDocPtr()->DocumentElement;
...
for(; it_Events != lstEvent.end(); it_Events++){
    nodeFault = m_pRootNode->ChildNodes[EVENT_REPORT].Get(EXmlTagOrder::extoFaults)->AddChild("Fault");
    nodeFault->Attributes[WideString("Entry")] = ((*it_Events).m_sEntry).c_str();
    nodeFault->AddChild("Time")->Text = ((*it_Events).m_sTimeStamp).c_str();
    nodeFault->AddChild("Code")->Text = ((*it_Events).m_sCode).c_str();
}

但我没有得到带有换行符或格式的输出。

当我在记事本中打开 XML 文件时,所有节点都在一行上:

<Faults><Fault Entry="0"><Time>0</Time><Code>20</Code></Fault><Fault Entry="1"><Time>2</Time><Code>10</Code></Faults>

XML 文件在 Internet Explorer 中打开时看起来是格式化的:

<Faults>
  <Fault Entry="0">
    <Time>0</Time>
    <Code>20</Code>
  </Fault>
  <Fault Entry="1">
    <Time>2</Time>
    <Code>10</Code>
  </Fault>
</Faults>

如何为每个节点添加一个换行符,以便我在 Notepad++ 中打开最终输出文件时看起来已格式化?

您必须在保存到文件之前设置一些格式选项。

在您的具体情况下:

FormMain->GetBBReportTXMLDocPtr()->Options = 
    FormMain->GetBBReportTXMLDocPtr()->Options << doNodeAutoIndent  

查看FormatXMLData()函数:

Formats a string of XML so that it is more readable.

Use FormatXMLData to convert a string of XML into a format that represents its structure. FormatXMLData changes the input string (XMLData) so that each element node appears on its own line, indented appropriately to reflect its nesting in the node hierarchy.