¿Cuál es la diferencia entre XElement
y XDocument
y cuándo se usa?¿Cuál es la diferencia entre XElement y XDocument?
Respuesta
XDocument representa un documento XML completo. Normalmente se compone de varios elementos.
XElement representa un elemento XML (con atributos, elementos secundarios, etc.). Es parte de un documento más grande.
Utilice XDocument cuando trabaje con un documento XML completo, XElement cuando trabaje con un elemento XML.
Por ejemplo - XElement
tiene un HasAttributes
propiedad que indica si existe algún atributo en el elemento, sino una XDocument
no, ya que este tipo de propiedad no tiene sentido en el contexto de un documento XML conjunto.
_XElement no tiene ningún método de carga_: parece incorrecto, vea [Load (String)] (http://msdn.microsoft.com/en-us/library/bb298435.aspx) y [otros métodos 'Load 'de sobrecarga] (http: //msdn.microsoft.com/en-us/library/system.xml.linq.xelement.aspx). – bluish
@bluish - Gracias por la corrección. Respuesta actualizada – Oded
De MSDN:
en cuenta que sólo tiene que crear objetos XDocument Cuando requiera la funcionalidad específica proporcionada por la clase XDocument. En muchas circunstancias , puede trabajar directamente con XElement. Trabajando directamente con XElement es un modelo de programación simple .
XDocument proviene de XContainer. Por lo tanto, puede contener nodos secundarios. Sin embargo, los objetos XDocument pueden tener solo un nodo secundario XElement. Este refleja el estándar XML que allí puede ser solo un elemento raíz en un documento XML .
He aquí un ejemplo práctico de msdn que lo aclara. Supongamos que tiene esto en la prueba .xml archivo:
<Root>
<Child1>1</Child1>
<Child2>2</Child2>
<Child3>3</Child3>
</Root>
Con XDocument si hace esto:
foreach (var element in XDocument.Load("test.xml").Elements()) Console.WriteLine(element);
Usted consigue esta vuelta:
<Root> <Child1>1</Child1> <Child2>2</Child2> <Child3>3</Child3> </Root>
para obtener el valor en
Child1
nodo, deberás hacer:var child1 = XDocument.Load("test.xml").Element("Root").Element("Child1").Value;
O
var child1 = XDocument.Load("test.xml").Root.Element("Child1").Value;
Con XElement si hace esto:
foreach (var element in XElement.Load("test.xml").Elements()) Console.WriteLine(element);
Usted consigue esta vuelta:
<Child1>1</Child1> <Child2>2</Child2> <Child3>3</Child3>
para obtener el valor en
Child1
nodo, que va a hacer:var child1 = XElement.Load("test.xml").Element("Child1").Value;
En resumen, XElement
ignora el nodo raíz, mientras que XDocument
no funciona. Aproximadamente, XDocument.Root = XElement
, o XDocument.Root.Elements() = XElement.Elements()
. Ambos derivan de XContainer
. Otra diferencia menor es que XElement
implementa IXmlSerializable
que no creo que importe en su mayoría. XElement
sería suficiente para la gran mayoría de los casos en los que solo desea consultar los nodos secundarios. El nombre me confunde, así que prefiero usar XDocument
.
De acuerdo con el artículo de MSDN LINQ to XML vs. DOM, bajo el subtítulo "que trabajan directamente con los elementos XML":
Al utilizar LINQ para XML, se utiliza la clase XDocument sólo si desea añadir un comentario o instrucción de procesamiento en el nivel raíz del documento.
- 1. ¿Cuál es la diferencia entre {0} y ""?
- 2. Cuál es la diferencia entre = y: =
- 3. ¿Cuál es la diferencia entre .ToString (+) y ""
- 4. Cuál es la diferencia entre $ (...) y `...`
- 5. ¿cuál es la diferencia entre:.! y: r !?
- 6. ¿Cuál es la diferencia entre ".equals" y "=="?
- 7. ¿Cuál es la diferencia entre dict() y {}?
- 8. ¿Cuál es la diferencia entre `##` y `hashCode`?
- 9. ¿Cuál es la diferencia entre "$^N" y "$ +"?
- 10. ¿Cuál es la diferencia entre [indefinido] y [,]?
- 11. ¿Cuál es la diferencia entre + = y = +?
- 12. ¿Cuál es la diferencia entre " " y ""?
- 13. Cuál es la diferencia entre $ y jQuery
- 14. Seleccionar un XElement de un XDocument
- 15. OpenGL (ES) - ¿Cuál es la diferencia entre frustum y orto?
- 16. Cuál es la diferencia entre la función() {}() y la función() {}()
- 17. ¿Cuál es la diferencia entre la abstracción y la encapsulación?
- 18. ¿Cuál es la diferencia entre @ y $ y% en MSBuild?
- 19. ¿Cuál es la diferencia entre la vinculación estática y dinámica?
- 20. ¿Cuál es la diferencia entre la sección .got y .got.plt?
- 21. ¿Cuál es la diferencia entre el colado y la coerción?
- 22. ¿cuál es la diferencia entre el complemento y la biblioteca?
- 23. ¿Cuál es la diferencia entre el casting y la conversión?
- 24. ¿Cuál es la diferencia entre WPF y la aplicación Silverlight?
- 25. ¿Cuál es la diferencia entre uno mismo y la ventana?
- 26. ¿Cuál es la diferencia entre CookieContainer y la colección Response.Cookies?
- 27. ¿Cuál es la diferencia entre la relación Composición y Asociación?
- 28. ¿cuál es la diferencia entre el material y la textura?
- 29. ¿Cuál es la diferencia entre el marco y la arquitectura?
- 30. ¿Cuál es la diferencia entre la carpeta vim72 y vimfiles?
[Este enlace de MSDN] (http://msdn.microsoft.com/en-us/library/bb675196.aspx) nos da una idea clara acerca de consultar un XDocument contra consultar un elemento XElement. – CSharp