Información general de la clase XDocument
La clase XDocument contiene la información necesaria para un documento XML válido, que incluye una declaración XML, instrucciones de procesamiento y comentarios.
Solo debes crear objetos XDocument si necesita la funcionalidad específica que proporciona la clase XDocument. En muchas circunstancias, puede trabajar directamente con XElement. Trabajar directamente con XElement constituye un modelo de programación más simple.
XDocument deriva de XContainer, por lo que puede contener nodos secundarios. Sin embargo, los objetos XDocument solo pueden tener un nodo XElement secundario. Esto refleja el estándar XML: solo puede haber un elemento raíz en un documento XML.
Componentes de XDocument
Un objeto XDocument puede contener los siguientes elementos:
- Un objeto XDeclaration. XDeclaration permite especificar las partes pertinentes de una declaración XML: la versión XML, la codificación del documento y si el documento XML es independiente.
- Un objeto XElement. Este objeto es el nodo raíz del documento XML.
- Cualquier número de objetos XProcessingInstruction. Una instrucción de procesamiento comunica información a una aplicación que procesa el XML.
- Cualquier número de objetos XComment. Los comentarios serán del mismo nivel que el elemento raíz.
- Un elemento XDocumentType para el DTD.
Al serializar un objeto XDocument, aunque XDocument.Declaration
sea null
, el resultado generará una declaración XML, siempre y cuando el redactor haya establecido Writer.Settings.OmitXmlDeclaration
en false
(valor predeterminado).
De manera predeterminada, LINQ to XML establece la versión en "1.0" y la codificación en "utf-8".
Usar XElement sin XDocument
Tal como se indicó anteriormente, la clase XElement es la clase principal de la interfaz de programación LINQ to XML. En muchos casos, la aplicación no requerirá la creación de un documento. Al usar la clase XElement, puedes:
- Crear un árbol XML.
- Agregar otros árboles XML.
- Modificar el árbol XML.
- Guarde y
Usar XDocument
Para construir un objeto XDocument, use la construcción funcional, al igual que cuando se construyen objetos XElement.
El ejemplo siguiente crea un objeto XDocument y sus objetos contenidos asociados.
XDocument d = new XDocument(
new XComment("This is a comment."),
new XProcessingInstruction("xml-stylesheet",
"href='mystyle.css' title='Compact' type='text/css'"),
new XElement("Pubs",
new XElement("Book",
new XElement("Title", "Artifacts of Roman Civilization"),
new XElement("Author", "Moreno, Jordao")
),
new XElement("Book",
new XElement("Title", "Midieval Tools and Implements"),
new XElement("Author", "Gazit, Inbar")
)
),
new XComment("This is another comment.")
);
d.Declaration = new XDeclaration("1.0", "utf-8", "true");
Console.WriteLine(d);
d.Save("test.xml");
Dim doc As XDocument = <?xml version="1.0" encoding="utf-8"?>
<!--This is a comment.-->
<?xml-stylesheet href='mystyle.css' title='Compact' type='text/css'?>
<Pubs>
<Book>
<Title>Artifacts of Roman Civilization</Title>
<Author>Moreno, Jordao</Author>
</Book>
<Book>
<Title>Midieval Tools and Implements</Title>
<Author>Gazit, Inbar</Author>
</Book>
</Pubs>
<!--This is another comment.-->
doc.Save("test.xml")
El ejemplo produce la siguiente salida en test.xml:
<?xml version="1.0" encoding="utf-8"?>
<!--This is a comment.-->
<?xml-stylesheet href='mystyle.css' title='Compact' type='text/css'?>
<Pubs>
<Book>
<Title>Artifacts of Roman Civilization</Title>
<Author>Moreno, Jordao</Author>
</Book>
<Book>
<Title>Midieval Tools and Implements</Title>
<Author>Gazit, Inbar</Author>
</Book>
</Pubs>
<!--This is another comment.-->