【问题标题】:How do I set the Settings property in XmlTextWriter, so that I can write each XML attribute on its own line?如何在 XmlTextWriter 中设置 Settings 属性,以便我可以将每个 XML 属性写在自己的行上?
【发布时间】:2012-01-04 10:45:49
【问题描述】:

我有这段代码,它将一个对象序列化为一个文件。我试图让每个 XML 属性在单独的行上输出。代码如下所示:

public static void ToXMLFile(Object obj, string filePath)
{
    XmlSerializer serializer = new XmlSerializer(obj.GetType());

    XmlWriterSettings settings = new XmlWriterSettings();
    settings.NewLineOnAttributes = true;

    XmlTextWriter writer = new XmlTextWriter(filePath, Encoding.UTF8);
    writer.Settings = settings; // Fails here.  Property is read only.

    using (Stream baseStream = writer.BaseStream)
    {
        serializer.Serialize(writer, obj);
    }
}

唯一的问题是,XmlTextWriter 对象的Settings 属性是只读的。

如何在XmlTextWriter 对象上设置Settings 属性,以便NewLineOnAttributes 设置有效?


好吧,我想我需要一个XmlTextWriter,因为XmlWriter 是一个abstract 类。如果你问我,有点令人困惑。 最终的工作代码在这里:

/// <summary>
/// Serializes an object to an XML file; writes each XML attribute to a new line.
/// </summary>
public static void ToXMLFile(Object obj, string filePath)
{
    XmlSerializer serializer = new XmlSerializer(obj.GetType());

    XmlWriterSettings settings = new XmlWriterSettings();
    settings.Indent = true;
    settings.NewLineOnAttributes = true;

    using (XmlWriter writer = XmlWriter.Create(filePath, settings))
    {
        serializer.Serialize(writer, obj);
    }
}

【问题讨论】:

    标签: c# xml serialization xmlwriter xmltextwriter


    【解决方案1】:

    使用XmlWriter的静态Create()方法。

    XmlWriter.Create(filePath, settings);
    

    请注意,您可以在设置中设置NewLineOnAttributes 属性。

    【讨论】:

    • 它没有实例化。它说它执行了,但是这样创建的对象是空的。注意:我用XmlTextWriter writer = XmlWriter.Create(filePath, settings) as XmlTextWriter;
    • @RobertHarvey - 这意味着XmlWriter.Create(...) 不会创建XmlTextWriter。查看输出时,您会发现它返回一个XmlWellFormedWriter。将其视为XmlWriter 是明智的。
    • 那么我如何将它发送到XmlTextWriter
    • 没关系,让它工作,谢谢。你是对的,我只需要一个XmlWriterXmlWriter 类是 abstract 类,但无论如何您都可以创建它的实例。如此创建的实例被称为别的东西。这太奇怪了。
    【解决方案2】:

    我知道这个问题很老了,无论如何实际上可以为XMLTextWriter 设置缩进。与XMLwriter 不同,您不必通过设置;你应该使用Formatting 属性:

    XmlTextWriter writer = new XmlTextWriter(filePath, Encoding.UTF8);
    w.Formatting = Formatting.Indented; 
    

    https://msdn.microsoft.com/en-us/library/system.xml.xmltextwriter.formatting(v=vs.110).aspx

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-03-23
      • 1970-01-01
      • 1970-01-01
      • 2018-09-16
      • 1970-01-01
      • 1970-01-01
      • 2019-08-27
      • 1970-01-01
      相关资源
      最近更新 更多