Ahora estoy aprendiendo, XmlDocument
pero me acabo de encontrar XDocument
y cuando trato de buscar la diferencia o los beneficios de ellos no puedo encontrar algo útil, ¿podría decirme por qué usaría uno sobre otro?
c#
xml
xmldocument
linq-to-xml
Tarik
fuente
fuente
Respuestas:
Si está utilizando .NET versión 3.0 o inferior, tiene que usar
XmlDocument
también conocido como el API DOM clásico. Del mismo modo, encontrará que hay otras API que esperarán esto.Sin embargo, si tiene la opción, le recomendaría usar
XDocument
también aka LINQ to XML. Es mucho más simple crear documentos y procesarlos. Por ejemplo, es la diferencia entre:y
Los espacios de nombres son bastante fáciles de trabajar en LINQ to XML, a diferencia de cualquier otra API XML que haya visto:
LINQ to XML también funciona muy bien con LINQ: su modelo de construcción le permite construir elementos con secuencias de subelementos con mucha facilidad:
Todo es mucho más declarativo, lo que encaja con el estilo general de LINQ.
Ahora, como mencionó Brannon, estas son API en memoria en lugar de las de transmisión (aunque
XStreamingElement
admite salida diferida).XmlReader
yXmlWriter
son las formas normales de transmisión de XML en .NET, pero puede mezclar todas las API hasta cierto punto. Por ejemplo, puede transmitir un documento grande pero usar LINQ to XML colocando unXmlReader
al comienzo de un elemento, leyendo unoXElement
y procesándolo, luego pasando al siguiente elemento, etc. Hay varias publicaciones de blog sobre esta técnica, Aquí hay uno que encontré con una búsqueda rápida .fuente
Me sorprende que ninguna de las respuestas hasta ahora mencione el hecho de que
XmlDocument
no proporciona información de línea , mientras queXDocument
sí (a través de laIXmlLineInfo
interfaz).Esta puede ser una característica crítica en algunos casos (por ejemplo, si desea informar errores en un XML, o realizar un seguimiento de dónde se definen los elementos en general) y es mejor que esté al tanto de esto antes de comenzar a implementarlo
XmlDocument
, para más adelante descubre que tienes que cambiarlo todo.fuente
XDocument
sí proporciona información de línea. Ver XDocument.Load withLoadOptions.SetLineInfo
como segundo argumento. Si conoces una forma de obtener información de línea,XmlDocument
tengo curiosidad; cuando escribí esta respuesta no pude encontrar ninguna. Esta otra respuesta parece confirmar: stackoverflow.com/a/33622102/253883XmlDocument
es ideal para desarrolladores que están familiarizados con el modelo de objetos DOM XML. Ha existido por un tiempo, y más o menos corresponde a un estándar W3C. Es compatible con la navegación manual, así como laXPath
selección de nodos.XDocument
alimenta la característica LINQ to XML en .NET 3.5. Hace un uso intensivoIEnumerable<>
y puede ser más fácil trabajar con él en C # directo.Ambos modelos de documentos requieren que cargue todo el documento en la memoria (a diferencia de,
XmlReader
por ejemplo).fuente
Como se mencionó en otra parte, sin duda, Linq to Xml hace que la creación y alteración de documentos xml sea muy fácil en comparación con
XmlDocument
, y laXNamespace ns + "elementName"
sintaxis permite una lectura placentera cuando se trata de espacios de nombres.Una cosa que vale la pena mencionar
xsl
yxpath
que es difícil notar es que aún es posible ejecutarxpath 1.0
expresiones arbitrarias en Linq 2 XmlXNodes
al incluir:y luego podemos navegar y proyectar datos usando
xpath
estos métodos de extensión:Por ejemplo, dado el documento Xml:
Podemos evaluar:
fuente
XDocument
es de la API de LINQ to XML, yXmlDocument
es la API de estilo DOM estándar para XML. Si conoce DOM bien y no quiere aprender LINQ to XML, vaya conXmlDocument
. Si eres nuevo en ambos, mira esta página que compara los dos, y elige cuál te gusta más.Acabo de comenzar a usar LINQ to XML, y me encanta la forma en que creas un documento XML utilizando la construcción funcional. Es realmente bueno. DOM es torpe en comparación.
fuente
Además, tenga en cuenta que
XDocument
es compatible con Xbox 360 y Windows Phone OS 7.0. Si los orienta, desarrolleXDocument
o migre desdeXmlDocument
.fuente
Creo que eso
XDocument
hace muchas más llamadas de creación de objetos. Sospecho que cuando manejas muchos documentos XML,XMLDocument
será más rápido.Un lugar donde esto sucede es en la gestión de los datos escaneados. Muchas herramientas de escaneo generan sus datos en XML (por razones obvias). Si tiene que procesar muchos de estos archivos de escaneo, creo que tendrá un mejor rendimiento
XMLDocument
.fuente