【问题标题】:XMLDocument.Save adds return carriages to XML when elements are blank当元素为空时,XMLDocument.Save 将回车添加到 XML
【发布时间】:2013-10-08 21:29:52
【问题描述】:

我正在加载一个 XML 文档,其中包含一些没有内文的标签。

如果我用一些数据填充内部文本,那么它会根据需要工作(您会在一行上获得开始标记、内部文本和结束标记),如下所示...

<root>
  <element>value</element>
</root>

问题出现在没有值的标签上。这些应该以与上面相同的方式显示,但没有粗略值,如下所示...

<root>
  <element></element>
</root>

但是,当内部文本有一个空字符串时,它会添加一个回车和换行,这不是预期的!它最终看起来像下面......

<root>
  <element>
  </element>
</root>

这是我当前产生上述结果的代码...

XmlDocument xmlDoc = new XmlDocument();
xmlDoc.Load(@"C:\test.xml");

//Save the xml and then cleanup
xmlDoc.Save(@"C:\test.xml");

【问题讨论】:

    标签: c# .net xml


    【解决方案1】:

    这已经帮我解决了...

    XmlDocument xmlDoc = new XmlDocument();
    xmlDoc.Load(@"C:\test.xml");
    
    //Save the xml and then cleanup
    XmlWriterSettings settings = new XmlWriterSettings { Indent = true };
    XmlWriter writer = XmlWriter.Create(@"C:\test.xml", settings);
    xmlDoc.Save(writer);
    

    【讨论】:

    • 我不明白为什么这样有效,而且 XmlDocument PreserveWhiteSpace 一直让我失望,但它解决了我的问题。
    • 这帮助我们解决了导致数据库无法从修改后的 xml 输出正确构建的问题。问题是空元素上的“XmlDocument.Save()”方法生成的新行。谢谢!
    【解决方案2】:

    【讨论】:

    • 谢谢,是的,我一发布这个问题就找到了答案。如果他们遇到同样的情况,我提交了确切的代码以帮助其他人。感谢您的回答!
    【解决方案3】:

    可能为时已晚,但我参考了 Arvo Bowen 给出的解决方案。 Arvo 的解决方案是用 C# 写的,我用 Powershell Syntax 写的一样

    # $dest_file is the path to the destination file
    $xml_dest = [XML] (Get-Content $dest_file)
    
    #
    #   Operations done on $xml_dest
    #
    
    $settings = new-object System.Xml.XmlWriterSettings
    $settings.CloseOutput = $true
    $settings.Indent = $true
    $writer = [System.Xml.XmlWriter]::Create($dest_file, $settings)
    
    $xml_dest.Save($writer)
    $writer.Close()
    

    它解决了我的两个问题:

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-10-14
      • 2012-05-31
      • 2012-04-14
      • 2013-07-19
      • 2013-08-10
      • 1970-01-01
      • 2010-12-18
      • 1970-01-01
      相关资源
      最近更新 更多