Как я могу создать действительный XML в C #?
Это зависит от сценария. 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
и т. Д.) Быстро займет много памяти. Поэтому, если вы пишете XML-файл размером 100 МБ из CSV , вы можете подумать XmlWriter
; это более примитивно (пожарный шланг с однократной записью), но очень эффективно (представьте большой цикл здесь):
XmlWriter writer = XmlWriter.Create(Console.Out);
writer.WriteStartElement("Foo");
writer.WriteAttributeString("Bar", "Some & value");
writer.WriteElementString("Nested", "data");
writer.WriteEndElement();
Наконец, через XmlSerializer
:
[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 на самом деле не имеет прямой связи с объектной моделью). Другая проблема XmlSerializer
заключается в том, что он не любит сериализовывать неизменяемые типы: все должно иметь общедоступные методы получения и установки (если вы не делаете все это самостоятельно, реализуя IXmlSerializable
, и в этом случае вы не получили много пользы от использования XmlSerializer
).
Лучшее, что я попробовал, это LINQ to XSD (что неизвестно большинству разработчиков). Вы даете ему схему XSD, и она генерирует идеально отображенную полную объектную модель со строгой типизацией (на основе LINQ to XML) для вас в фоновом режиме, с которой действительно легко работать - и она обновляет и проверяет вашу объектную модель и XML в в режиме реального времени. Хотя это все еще «Предварительный просмотр», я не обнаружил никаких ошибок с ним.
Если у вас есть схема XSD, которая выглядит следующим образом:
Тогда вы можете просто построить XML следующим образом:
Или просто загрузите XML из файла следующим образом:
Или сохраните это так:
rootElement.Untyped
также возвращает элемент в форме XElement (из LINQ в XML).источник
RootElement
источник
XmlWriter - это самый быстрый способ написать хороший XML. XDocument, XMLDocument и некоторые другие тоже хорошо работают, но не оптимизированы для написания XML. Если вы хотите написать XML как можно быстрее, вам обязательно следует использовать XmlWriter.
источник
В прошлом я создавал свою XML-схему, а затем использовал инструмент для генерации классов C #, которые будут сериализоваться в эту схему. Инструмент определения схемы XML является одним из примеров
http://msdn.microsoft.com/en-us/library/x6c1kb0s(VS.71).aspx
источник
Я думаю, что этого ресурса должно быть достаточно для умеренного сохранения / загрузки XML: чтение / запись XML с использованием C # .
Моей задачей было хранить музыкальные записи. Я выбираю XML, потому что думаю .NET достаточно развит, чтобы можно было легко эту задачу. Я был прав :)
Это мой прототип файла песни:
Это может быть решено довольно легко:
Для сохранения в файл:
Для загрузки файла:
источник
Для простых вещей я просто использую классы XmlDocument / XmlNode / XmlAttribute и DOM XmlDocument, найденные в System.XML.
Он генерирует XML для меня, мне просто нужно связать несколько элементов вместе.
Однако на более крупных вещах я использую сериализацию XML.
источник
Для простых случаев я бы также предложил посмотреть на XmlOutput свободный интерфейс для создания Xml.
XmlOutput отлично подходит для простого создания Xml с читаемым и поддерживаемым кодом, в то же время генерируя действительный Xml. Оригинал пост имеет много примеров.
источник
Как указано выше.
Я использую stringbuilder.append ().
Очень просто, и вы можете сделать xmldocument.load (объект strinbuilder в качестве параметра).
Вероятно, вы обнаружите, что используете string.concat в параметре append, но это очень простой подход.
источник