How do I preserve all XML formatting with XDocument?

后端 未结 2 2144
盖世英雄少女心
盖世英雄少女心 2021-02-14 17:53

I\'m trying to read in an XML configuration file, do a few tweaks (finding and removing or adding an element) and save it again. I want this edit to be as non-intrusive as possi

相关标签:
2条回答
  • 2021-02-14 18:19

    The LINQ to XML object model does not store whether an element parsed is marked up as <foo/> or <foo /> so when saving back such information is lost. If you want to ensure a certain format then you could extend an XmlWriter implementation and override its http://msdn.microsoft.com/en-us/library/system.xml.xmlwriter.writeendelement.aspx but that way you would also not preserve the input format, rather you would then write out any empty elements as <foo/> or whatever format you implement in your method.

    There are other changes that can happen, for instance when loading the file

    <html xmlns="http://www.w3.org/1999/xhtml" xmlns:xhtml="http://www.w3.org/1999/xhtml">
      <head>
        <title>Example</title>
      </head>
      <body>
        <h1>Example</h1>
      </body>
    </html>
    

    and saving it back the result is

    <xhtml:html xmlns="http://www.w3.org/1999/xhtml" xmlns:xhtml="http://www.w3.org/1999/xhtml">
      <xhtml:head>
        <xhtml:title>Example</xhtml:title>
      </xhtml:head>
      <xhtml:body>
        <xhtml:h1>Example</xhtml:h1>
      </xhtml:body>
    </xhtml:html>
    

    so don't expect markup details to be preserved when loading/saving with XDocument/XElement.

    0 讨论(0)
  • 2021-02-14 18:22

    To avoid the declaration in the header of the document you can use the following

        XmlWriterSettings settings = new XmlWriterSettings();
        settings.OmitXmlDeclaration = true;
    
    
            using (XmlWriter xw = XmlWriter.Create(fileName, settings))
            {
                doc.Save(xw);
            }
    
    0 讨论(0)
提交回复
热议问题