Как я могу построить XML в C #?

Как я могу создать действительный XML в C #?

428
задан 28.10.2014, 11:55

8 ответов

Это зависит от сценария. XmlSerializer, конечно, один путь и имеет преимущество отображения непосредственно на объектную модель. В.NET 3.5, XDocument, и т.д. являются также очень дружественными. Если размер является очень большим, то XmlWriter Ваш друг.

Для XDocument пример:

Console.WriteLine(
    new XElement("Foo",
        new XAttribute("Bar", "some & value"),
        new XElement("Nested", "data")));

Или то же с XmlDocument:

XmlDocument doc = new XmlDocument();
XmlElement el = (XmlElement)doc.AppendChild(doc.CreateElement("Foo"));
el.SetAttribute("Bar", "some & value");
el.AppendChild(doc.CreateElement("Nested")).InnerText = "data";
Console.WriteLine(doc.OuterXml);

, Если Вы пишете большой поток данных, тогда любой из подходов DOM (такой как XmlDocument / XDocument, и т.д.) быстро возьмет большую память. Таким образом, если Вы пишете 100  XML-файл МБ от [1 116] CSV, Вы могли бы рассмотреть XmlWriter; это более примитивно (неперезаписываемый пожарный шланг), но очень эффективно (вообразите большой цикл здесь):

XmlWriter writer = XmlWriter.Create(Console.Out);
writer.WriteStartElement("Foo");
writer.WriteAttributeString("Bar", "Some & value");
writer.WriteElementString("Nested", "data");
writer.WriteEndElement();

Наконец, через [1 112]:

[Serializable]
public class Foo
{
    [XmlAttribute]
    public string Bar { get; set; }
    public string Nested { get; set; }
}
...
Foo foo = new Foo
{
    Bar = "some & value",
    Nested = "data"
};
new XmlSerializer(typeof(Foo)).Serialize(Console.Out, foo);

Это - хорошая модель для отображения на классы и т.д.; однако, это могло бы быть излишество при выполнении чего-то простого (или если желаемый XML действительно не имеет прямой корреляции к объектной модели). Другая проблема с [1 113] - то, что этому не нравится сериализировать неизменные типы: все должно иметь общедоступного метода get и метод set (если Вы не делаете все это сами путем реализации IXmlSerializable, в этом случае Вы не получили много при помощи [1 115]).

498

Я дал бы XLINQ (чтение: LINQ к XML) попытка. Это легко, интуитивно и легко доступно для редактирования.

Образец: Чтение и Запись XML использование XLinq

21
ответ дан 29.08.2019, 21:53
  • 1
    Я нашел эту находку действительно полезной, Чад спасибо. В то время как существует сериализация времен, правильный ответ, существует много сценариев, где комплекс xml поколение в коде является правильным ответом. Это - позор, C# не имеют тот же встроенный Xml capababilities как VB.net. Еще раз спасибо. – Russell 30.09.2009, 20:15
  • 2
    Используя XElement Системы. Xml. Linq для генерации xml очень удобен – Jemsworld 27.05.2012, 13:29
  • 3
    Это добивается цели, спасибо – Kostas.N 30.11.2019, 21:29

Также проверьте Mark S. Rasmussen XmlDocument быстрый интерфейс , который действительно обеспечивает легкий вводить/читать вывод XML.

9
ответ дан 29.08.2019, 21:53
  • 1
    Кроме того, it' s стоящий, чтобы отметить, что много методов, которые берут массив параметров, будут также иметь перегрузки для (объекта), (объект, объект) и (объект, объект, объект) - Это должно избежать издержек построения объекта массива только для нескольких объектов, так как эти перегрузки будут подобраны сначала. – Mike Christensen 23.12.2019, 06:39

XmlWriter является самым быстрым способом записать хороший XML. XDocument, XMLDocument и работы некоторых других, хорошие также, но, не оптимизированы для записи XML. Если Вы хотите записать XML максимально быстро, необходимо определенно использовать XmlWriter.

9
ответ дан 04.10.2019, 13:12
  • 1
    Таким образом, если Вы хотите компьютер записать XML максимально быстро. Если Вы, разработчик, хотите создать XML самым легким и самым естественным способом, XmlWriter является, вероятно, не решением! – sjy 24.02.2014, 21:01

В прошлом я создал свою XML-схему, затем использовал инструмент для генерации классов C#, которые сериализируют к той схеме. Инструмент определения схемы XML является одним примером

http://msdn.microsoft.com/en-us/library/x6c1kb0s (По сравнению с 71) .aspx

3
ответ дан 04.10.2019, 13:12
  • 1
    I' ve установил его, но я понятия не имею, как использовать его - ни в каком меню нет никакой новой записи! – Lukasz Czerwinski 26.11.2019, 18:28

Как выше.

я использую stringbuilder.append ().

Очень простой, и можно тогда сделать xmldocument.load (strinbuilder объект как параметр).

Вы будете, вероятно, использовать string.concat в добавлять параметре, но это - очень простой подход.

-3
ответ дан 04.10.2019, 13:12
  • 1
    Кроме тех случаев, когда Вы забываете кодировать что-то правильно и писать недопустимый Xml. – Robert Paulson 14.11.2008, 09:07
  • 2
    Этим ответом абсолютно хлопнули, но основанный на этом вопросе я смотрел на одну из своих собственных реализаций, где я создаю XML. Для моего конкретного проекта я последовательно находил, что создание через StringBuilder закончилось во время обработки на 10% быстрее, чем использование XDocument/XmlWriter. Но, я чувствую себя довольным XML и that' s для моего конкретного проекта. (Для ссылки заключительные размеры XML составляют приблизительно 3,4 МБ с более чем 8 000 строк.) – James Skemp 25.10.2010, 05:38
  • 3
    I' d быть любопытным знать, измерили ли Вы компромисс между производительностью приложения (мы говорим улучшения миллисекунды здесь?) и обслуживание приложения (Ваши инженеры должны ознакомить себя с кодом в течение часа прежде, чем внести изменения теперь?) – Dan Esparza 11.08.2011, 07:25

Для простых случаев я также предложил бы смотреть XmlOutput быстрый интерфейс для создания Xml.

XmlOutput является большим для простого создания Xml с читаемым и удобным в сопровождении кодом при генерации допустимого Xml. сообщение orginal имеет некоторые яркие примеры.

1
ответ дан 04.10.2019, 13:12

Для простых вещей я просто использую XmlDocument/XmlNode/XmlAttribute классы и XmlDocument DOM, найденный в System.XML.

Это генерирует XML для меня, я просто должен соединить несколько объектов.

Однако на больших вещах, я использую сериализацию XML.

1
ответ дан 04.10.2019, 13:12

Теги

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