Documents and Declarations


An XDocument wraps a root XElement and allows you to add an XDeclaration, processing instructions, a document type, and root-level comments. An XDocument is optional and can be ignored or omitted: unlike with the W3C DOM, it does not serve as glue to keep everything together.

An XDocument provides the same functional constructors as XElement. And as it’s based on XContainer, it also supports the AddXXX, RemoveXXX, and ReplaceXXX methods. Unlike XElement, however, an XDocument can accept only limited content:

  • A single XElement object (the “root”)

  • A single XDeclaration object

  • A single XDocumentType object (to reference a DTD)

  • Any number of XProcessingInstruction objects

  • Any number of XComment objects


Of these, only the root XElement is mandatory to have a valid XDocument. The XDeclaration is optional—if omitted, default settings are applied during serialization.

The simplest valid XDocument has just a root element:

	var doc = new XDocument (
	            new XElement ("test", "data")

Notice that we didn’t include an XDeclaration object. The file generated by calling doc.Save would still contain an XML declaration, however, because one is generated by default.

The next example produces a simple but correct XHTML file, illustrating all the constructs that an XDocument can accept:

	var styleInstruction = new XProcessingInstruction (
	 "xml-stylesheet", "href='styles.css' type='text/css'");

	var docType = new XDocumentType ("html", "-//W3C//DTD XHTML 1.0 Strict//EN", "", ...

Get LINQ Pocket Reference now with the O’Reilly learning platform.

O’Reilly members experience books, live events, courses curated by job role, and more from O’Reilly and nearly 200 top publishers.