XDocument.CreateWriter 使用 XmlWriterSettings

XDocument.CreateWriter using XmlWriterSettings

我正在尝试为 XDocument 创建 XMLWriter,并对其应用设置,但我不知道如何操作。

这是我目前的情况。

        var writerSettings = new XmlWriterSettings()
        {
            OmitXmlDeclaration = true,
            Encoding = Encoding.UTF8
        };
        var request = new XDocument();
        using (var writer = request.CreateWriter())
        {
            writer.WriteStartDocument();
            writer.WriteStartElement("CUSTOMER");
            writer.WriteElementString("ADDRESS", "123 Fake St.");
            writer.WriteElementString("CITY", "San Jose");
            writer.WriteElementString("STATE", "CA");
            writer.WriteEndElement();
            writer.WriteEndDocument();
        }

我不知道如何将 writerSettings 应用于编写器。 XDocument.CreateWriter() 方法不采用任何参数来指定 XMLWriterSettings。而且,在创建之后,设置 属性 没有 setter.

如果没有办法使用 CreateWriter() 和应用设置,我还能如何完成等效的事情并最终得到相同的结果?

如果您使用 XDocument.Save(XmlWriter),您可以创建自己的 XmlWriter 并提供 XmlWriterSettings 参数,并将 XDocument 的内容写入其中。

或者,您可以只调用其中一个 XDocument.ToString overloads,它从返回的字符串中省略 XML 声明(如果这是您想要配置的全部内容)。

您的示例在下面更新以显示两个选项:

using System;
using System.Text;
using System.Xml;
using System.Xml.Linq;

class Program
{
    static void Main(string[] args)
    {
        var request = new XDocument();

        using (var writer = request.CreateWriter())
        {
            writer.WriteStartDocument();
            writer.WriteStartElement("CUSTOMER");
            writer.WriteElementString("ADDRESS", "123 Fake St.");
            writer.WriteElementString("CITY", "San Jose");
            writer.WriteElementString("STATE", "CA");
            writer.WriteEndElement();
            writer.WriteEndDocument();
        }

        // XDocument.ToString() will print:
        //<CUSTOMER>
        //  <ADDRESS>123 Fake St.</ADDRESS>
        //  <CITY>San Jose</CITY>
        //  <STATE>CA</STATE>
        //</CUSTOMER>
        Console.WriteLine(request.ToString());

        // And here's how to use the XmlWriterSettings with XDocument.Save:
        var writerSettings = new XmlWriterSettings()
        {
            OmitXmlDeclaration = true,
            Encoding = Encoding.UTF8
        };

        using (var writer = XmlWriter.Create("test.xml", writerSettings))
        {
            request.Save(writer);
        }

        // The above will write (you could adjust the XmlWriterSettings to add whitespace):
        //<CUSTOMER><ADDRESS>123 Fake St.</ADDRESS><CITY>San Jose</CITY><STATE>CA</STATE></CUSTOMER>
    }
}

或者,如果您不使用 XDocument 的任何其他功能,您可以首先创建自己的 XmlWriter 实例,然后向其中添加节点,并省略XDocument 互动。

或者,使用 xmlwriter 的静态方法,即 create()

using (XmlWriter writer = XmlWriter.Create(filePath, settings))
{ 
//do your thing 
} 

我以前 运行 遇到过这个问题,我同意它不是很明显,尤其是在尝试做一个新的 xmlwriter 时。

编辑:也可能与 How do I set the Settings property in XmlTextWriter, so that I can write each XML attribute on its own line?

重复

如果您愿意,可以参考以进一步阅读!