XMLDocument.Save adds return carriages to XML when elements are blank

后端 未结 3 1341
刺人心
刺人心 2021-01-08 01:43

I\'m loading a XML Document that has some tags that have no innertext.

If I populate the innertext with some data then it works as needed (you get opening tag, inner

相关标签:
3条回答
  • 2021-01-08 01:50

    This fixed it for me...

    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);
    
    0 讨论(0)
  • 2021-01-08 02:04

    You control that through the XMLWriter within the Settings Property.

    Check out this example along with the following references. http://msdn.microsoft.com/en-us/library/ms162618.aspx

    Refernces http://msdn.microsoft.com/en-us/library/system.xml.xmlwriter.aspx http://msdn.microsoft.com/en-us/library/system.xml.xmlwritersettings.aspx http://msdn.microsoft.com/en-us/library/system.xml.xmlwritersettings.newlinehandling.aspx

    0 讨论(0)
  • 2021-01-08 02:05

    Probably too late, but I referred to the solution given by Arvo Bowen. Arvo's solution is in C#, I wrote the same in 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()
    

    It solved my two problems:

    • One, problem stated above i.e. newline character being added to null/empty values.
    • Second, no end tag being created for null/empty values. ex: <tag1>$null</tag1> would actually be written in file as <tag /> Refer this thread: Can we force XmlWriter to issue <my-tag></my-tag> rather than <my-tag/>?
    0 讨论(0)
提交回复
热议问题