Общие сведения о классе XDocument

Класс XDocument содержит сведения, необходимые для допустимого XML-документа, который включает объявление XML, инструкции по обработке и комментарии.

Создавать объекты необходимо только в том случае, если требуется XDocument определенная функциональность, предоставляемая классом XDocument . Во многих случаях пользователь может работать непосредственно с XElement. Непосредственная работа с XElement реализует более простую модель программирования.

XDocument производный от XContainer, поэтому он может содержать дочерние узлы. Однако объекты XDocument могут иметь только по одному дочернему узлу XElement. Это обстоятельство отражает стандарт XML, согласно которому в XML-документе может содержаться лишь один корневой элемент.

Компоненты XDocument

Документ XDocument может включать в себя следующие элементы:

  • Один объект XDeclaration. XDeclaration позволяет указать соответствующие части объявления XML: XML-версию, кодировку документа и автономный XML-документ.
  • Один объект XElement. Этот объект является корневым узлом XML-документа.
  • Любое количество объектов XProcessingInstruction. Инструкция по обработке передает сведения в приложение, обрабатывающее XML-код.
  • Любое количество объектов XComment. Комментарии и корневой элемент находятся на одном уровне.
  • Один тип документа XDocumentType для DTD.

При сериализации документа XDocument, даже если значением декларации XDocument.Declaration является null, выходные данные будут иметь XML-декларацию, если для свойства Writer.Settings.OmitXmlDeclaration автор указал значение false (применяется по умолчанию).

По умолчанию LINQ to XML задает версию "1.0" и задает кодировку "utf-8".

Использование XElement без XDocument

Как и ранее упоминание, XElement класс является основным классом в интерфейсе программирования LINQ to XML. Во многих случаях приложению не потребуется создать документ. С помощью XElement класса можно:

  • Создайте XML-дерево.
  • Добавьте в него другие деревья XML.
  • Измените XML-дерево.
  • Сохраните его.

Использование XDocument

При создании объектов XDocument используется функциональное построение, так же как и при создании объектов XElement.

В следующем примере создается XDocument объект и связанные с ним объекты.

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")

В этом примере выходные данные создаются в 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.-->

См. также