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

Posted

技术标签:

【中文标题】如何为每个 XML 节点添加换行符?【英文标题】:How to add a line break to each XML node? 【发布时间】:2017-03-09 13:45:34 【问题描述】:

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

模板文件包含<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>

当我在 Internet Explorer 中打开 XML 文件时,它看起来已格式化:

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

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

【问题讨论】:

【参考方案1】:

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

在您的具体情况下:

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

【讨论】:

谢谢它对我有用。我需要在插入和加载之前添加它。【参考方案2】:

FormatXMLData()函数:

格式化一个 XML 字符串,使其更具可读性。

使用FormatXMLData 将XML 字符串转换为表示其结构的格式。 FormatXMLData 更改输入字符串 (XMLData) 以便每个元素节点出现在自己的行上,并适当缩进以反映其在节点层次结构中的嵌套。

【讨论】:

谢谢 Remy Leeau,我使用了 Options

以上是关于如何为每个 XML 节点添加换行符?的主要内容,如果未能解决你的问题,请参考以下文章

如何为flexbox,row,no-wrap添加换行符?

如何为xml节点sql server选择每个值

C#生成空节点XML文件,自动换行问题

如何为 .NET 项目自定义强制代码样式规则 #yyds干货盘点#

使用xmllint从XML节点获取URL,添加新行

如何在复制/粘贴web.config XML节点后阻止自动回车(换行)?