Я сейчас учусь, XmlDocument
но я только что столкнулся, XDocument
и когда я пытаюсь найти разницу или преимущества их, я не могу найти что-то полезное, не могли бы вы сказать мне, почему вы используете один над другим?
c#
xml
xmldocument
linq-to-xml
Тарик
источник
источник
Ответы:
Если вы используете .NET версии 3.0 или ниже, вы должны использовать
XmlDocument
классический API DOM. Точно так же вы найдете и другие API, которые ожидают этого.Однако, если у вас есть выбор, я бы настоятельно рекомендовал использовать
XDocument
также LINQ to XML. Это гораздо проще создавать документы и обрабатывать их. Например, это разница между:а также
Пространства имен довольно просты в работе с LINQ to XML, в отличие от любого другого API XML, который я когда-либо видел:
LINQ to XML также очень хорошо работает с LINQ - его модель построения позволяет вам действительно легко создавать элементы с последовательностями подэлементов:
Это все намного более декларативно, что вписывается в общий стиль LINQ.
Теперь, как упомянул Браннон, это API в памяти, а не потоковые (хотя и
XStreamingElement
поддерживает отложенный вывод).XmlReader
иXmlWriter
являются обычными способами потоковой передачи XML в .NET, но вы можете смешивать все API в некоторой степени. Например, вы можете выполнять потоковую передачу большого документа, но использовать LINQ to XML, помещаяXmlReader
в начало элемента, читаяXElement
его и обрабатывая, затем переходя к следующему элементу и т. Д. В этой статье есть различные сообщения в блоге, вот тот, который я нашел с помощью быстрого поиска .источник
Я удивлен, что ни один из ответов до сих пор не упоминает тот факт, что не
XmlDocument
предоставляет никакой информации о линии , покаXDocument
не делает (черезIXmlLineInfo
интерфейс).В некоторых случаях это может быть критически важной функцией (например, если вы хотите сообщить об ошибках в XML или отслеживать, где элементы определены в целом), и вам лучше об этом знать, прежде чем вы начнете успешно использовать использование
XmlDocument
, чтобы позже обнаружить, что вы должны изменить все это.источник
XDocument
она предоставляет информацию о линии. См XDocument.Load с вLoadOptions.SetLineInfo
качестве второго аргумента. Если вы знаете способ получить информацию о линии,XmlDocument
мне любопытно; назад, когда я написал этот ответ, я не смог найти ни одного. Этот другой ответ, кажется, подтверждает: stackoverflow.com/a/33622102/253883XmlDocument
отлично подходит для разработчиков, знакомых с объектной моделью XML DOM. Это было вокруг некоторое время, и более или менее соответствует стандарту W3C. Он поддерживает ручную навигацию, а такжеXPath
выбор узла.XDocument
поддерживает функцию LINQ to XML в .NET 3.5. Это делает интенсивное использованиеIEnumerable<>
и может быть легче работать в прямом C #.Обе модели документов требуют загрузки всего документа в память (в отличие от,
XmlReader
например).источник
Как уже упоминалось, несомненно, Linq to Xml делает создание и изменение XML-документов быстрым по сравнению с ним
XmlDocument
, аXNamespace ns + "elementName"
синтаксис обеспечивает приятное чтение при работе с пространствами имен.Одна вещь, о которой стоит упомянуть,
xsl
и которую стоит отметитьxpath
, это то, что по-прежнему возможно выполнять произвольныеxpath 1.0
выражения в Linq 2 XmlXNodes
, включая:и затем мы можем перемещаться и проецировать данные, используя
xpath
следующие методы расширения:Например, учитывая документ Xml:
Мы можем оценить:
источник
XDocument
из API LINQ to XML иXmlDocument
является стандартным API в стиле DOM для XML. Если вы хорошо знаете DOM и не хотите изучать LINQ to XML, продолжайтеXmlDocument
. Если вы новичок в обоих, проверьте эту страницу которая сравнивает эти два, и выберите, какой из них вам больше нравится.Я только начал использовать LINQ to XML, и мне нравится, как вы создаете XML-документ с использованием функциональной конструкции. Это действительно приятно. DOM неуклюжий по сравнению.
источник
Также обратите внимание, что
XDocument
поддерживается в Xbox 360 и Windows Phone OS 7.0. Если вы нацелены на них, развивайтесьXDocument
или переходите сXmlDocument
.источник
Я считаю, что это
XDocument
делает намного больше вызовов для создания объектов. Я подозреваю, что когда вы обрабатываете много XML-документов,XMLDocument
это будет быстрее.Одним из мест, где это происходит, является управление данными сканирования. Многие средства сканирования выводят свои данные в формате XML (по понятным причинам). Если вам придется обрабатывать много этих файлов сканирования, я думаю, у вас будет лучшая производительность
XMLDocument
.источник