Как записать (большой) XML в файл в C#?

Я бы сказал, что ответ «нет» по той самой причине, по которой arrow function отличается от function в JavaScript, а именно, изменяя лексическое this и arguments. Этот ответ содержит много подробностей о том, как function () {} отличается от myFunction = () => {}.

Наряду с этим, использование функций со стрелками запретило бы использование функций классов, поэтому, если вы внедряете какие-либо экземпляры службы, вы не сможете их использовать.

@Injectable()
export class AppController {
  constructor (private readonly appService: AppService) {}

  @Get('/')
  hello(): string {
    return this.appService.sayHello();
  }
}

будет работать и возвращать строку из функции appService.sayHello(), но этот

@Injectable()
export class AppController {
  constructor (private readonly appService: AppService) {}

  @Get('/')
  hello = (): string => {
    return this.appService.sayHello();
  }
}

не будет возвращать строку из функции appService.sayHello(), поскольку он не знает о appService ].

13
задан Community 23 May 2017 в 12:17
поделиться

4 ответа

Для написания больших xml, XmlWriter (напрямую) - ваш друг, но его сложнее использовать. Другой вариант - использовать подходы DOM / объектной модели и комбинировать их, что, вероятно, выполнимо , если вы захватите контроль над XmlWriterSettings , отключите маркер xml и избавитесь от объявления пространств имен ...

using System;
using System.Collections.Generic;
using System.Xml;
using System.Xml.Serialization;    
public class Foo {
    [XmlAttribute]
    public int Id { get; set; }
    public string Bar { get; set; }
}
static class Program {
    [STAThread]
    static void Main() {
        using (XmlWriter xw = XmlWriter.Create("out.xml")) {
            xw.WriteStartElement("xml");
            XmlSerializer ser = new XmlSerializer(typeof(Foo));
            XmlSerializerNamespaces ns = new XmlSerializerNamespaces();
            ns.Add("","");
            foreach (Foo foo in FooGenerator()) {
                ser.Serialize(xw, foo, ns);
            }
            xw.WriteEndElement();
        }
    }    
    // streaming approach; only have the smallest amount of program
    // data in memory at once - in this case, only a single `Foo` is
    // ever in use at a time
    static IEnumerable<Foo> FooGenerator() {
        for (int i = 0; i < 40; i++) {
            yield return new Foo { Id = i, Bar = "Foo " + i };
        }
    }
}
16
ответ дан 1 December 2019 в 21:25
поделиться

Почему бы просто не использовать TextWriter для записи XML?

-1
ответ дан 25 October 2019 в 21:23
поделиться

Используйте XmlWriter :

[...] писатель, который обеспечивает пост, некэшированные, перенаправляющие средства создание потоков или файлов, содержащих XML-данные.

9
ответ дан 1 December 2019 в 21:25
поделиться

Рассматривали ли вы его сжатие перед записью на диск? С XML вы можете добиться более чем 10-кратного сжатия и даже больше. на сжатие файла и запись сжатой версии, вероятно, у вас уйдет меньше времени, чем на чтение всей версии размером 500 МБ.

1
ответ дан 1 December 2019 в 21:25
поделиться
Другие вопросы по тегам:

Похожие вопросы: