Примечание
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Класс XPathNavigator предоставляет набор методов, используемых для вставки соседних, дочерних и атрибутных узлов в XML-документе. Чтобы использовать эти методы, XPathNavigator объект должен быть редактируемым, то есть его CanEdit свойство должно быть true
.
XPathNavigator объекты, которые могут изменять XML-документ, создаются методом CreateNavigatorXmlDocument класса. XPathNavigator объекты, созданные классом XPathDocument, доступны только для чтения, и любая попытка использовать методы редактирования объекта XPathNavigator, созданного объектом XPathDocument, приводит к NotSupportedException ошибке.
Дополнительные сведения о создании редактируемых XPathNavigator объектов см. в статье "Чтение XML-данных с помощью XPathDocument и XmlDocument".
Вставка узлов
Класс XPathNavigator предоставляет методы для вставки братских, дочерних и атрибутных узлов в XML-документ. Эти методы позволяют вставлять узлы и атрибуты в разных расположениях относительно текущей XPathNavigator позиции объекта и описаны в следующих разделах.
Вставка однотипных узлов
Класс XPathNavigator предоставляет следующие методы для вставки соседних узлов.
Эти методы вставляют узлы-соседи до и после узла, на котором в данный момент находится объект XPathNavigator.
Методы InsertAfter и InsertBefore перегружены и принимают объект string
, объект XmlReader или объект XPathNavigator, содержащий узел-брат, в качестве параметра. Оба метода также возвращают объект XmlWriter, который используется для вставки одноуровневых узлов.
Методы InsertElementAfter и InsertElementBefore вставляют один одноуровневый узел до и после узла, на котором в настоящий момент находится объект XPathNavigator, используя префикс пространства имен, локальное имя, URI пространства имен и значение, указанные в качестве параметров.
В следующем примере новый pages
элемент вставляется перед price
дочерним элементом первого book
элемента в contosoBooks.xml
файле.
XmlDocument document = new XmlDocument();
document.Load("contosoBooks.xml");
XPathNavigator navigator = document.CreateNavigator();
navigator.MoveToChild("bookstore", "http://www.contoso.com/books");
navigator.MoveToChild("book", "http://www.contoso.com/books");
navigator.MoveToChild("price", "http://www.contoso.com/books");
navigator.InsertBefore("<pages>100</pages>");
navigator.MoveToParent();
Console.WriteLine(navigator.OuterXml);
Dim document As XmlDocument = New XmlDocument()
document.Load("contosoBooks.xml")
Dim navigator As XPathNavigator = document.CreateNavigator()
navigator.MoveToChild("bookstore", "http://www.contoso.com/books")
navigator.MoveToChild("book", "http://www.contoso.com/books")
navigator.MoveToChild("price", "http://www.contoso.com/books")
navigator.InsertBefore("<pages>100</pages>")
navigator.MoveToParent()
Console.WriteLine(navigator.OuterXml)
Пример принимает contosoBooks.xml
файл в качестве входных данных.
<?xml version="1.0" encoding="utf-8" ?>
<bookstore xmlns="http://www.contoso.com/books">
<book genre="autobiography" publicationdate="1981-03-22" ISBN="1-861003-11-0">
<title>The Autobiography of Benjamin Franklin</title>
<author>
<first-name>Benjamin</first-name>
<last-name>Franklin</last-name>
</author>
<price>8.99</price>
</book>
<book genre="novel" publicationdate="1967-11-17" ISBN="0-201-63361-2">
<title>The Confidence Man</title>
<author>
<first-name>Herman</first-name>
<last-name>Melville</last-name>
</author>
<price>11.99</price>
</book>
<book genre="philosophy" publicationdate="1991-02-15" ISBN="1-861001-57-6">
<title>The Gorgias</title>
<author>
<name>Plato</name>
</author>
<price>9.99</price>
</book>
</bookstore>
Дополнительные сведения о методах InsertAfter, InsertBefore, InsertElementAfter и InsertElementBefore см. в справочной документации по классу XPathNavigator.
Вставка дочерних узлов
Класс XPathNavigator предоставляет следующие методы для вставки дочерних узлов.
Эти методы добавляют дочерние узлы в конец и начало списка дочерних узлов узла XPathNavigator, на котором в данный момент находится объект.
Как и методы в разделе "Вставка одноуровневых узлов", методы AppendChild и PrependChild принимают объект string
, XmlReader объект или XPathNavigator объект, содержащий дочерний узел, добавляемый в качестве параметра. Оба метода также возвращают объект XmlWriter, используемый для вставки дочерних узлов.
Кроме того, подобно методам в разделе "Вставка одноуровневых узлов", методы AppendChildElement и PrependChildElement вставляют по одному дочернему узлу в конец и начало списка дочерних узлов того узла, на котором объект XPathNavigator в настоящее время расположен, используя префикс пространства имен, локальное имя, URI пространства имен и значение, указанные в качестве параметров.
В следующем примере новый pages
дочерний элемент добавляется в список дочерних элементов первого book
элемента в contosoBooks.xml
файле.
XmlDocument document = new XmlDocument();
document.Load("contosoBooks.xml");
XPathNavigator navigator = document.CreateNavigator();
navigator.MoveToChild("bookstore", "http://www.contoso.com/books");
navigator.MoveToChild("book", "http://www.contoso.com/books");
navigator.AppendChild("<pages>100</pages>");
Console.WriteLine(navigator.OuterXml);
Dim document As XmlDocument = New XmlDocument()
document.Load("contosoBooks.xml")
Dim navigator As XPathNavigator = document.CreateNavigator()
navigator.MoveToChild("bookstore", "http://www.contoso.com/books")
navigator.MoveToChild("book", "http://www.contoso.com/books")
navigator.AppendChild("<pages>100</pages>")
Console.WriteLine(navigator.OuterXml)
Пример принимает contosoBooks.xml
файл в качестве входных данных.
<?xml version="1.0" encoding="utf-8" ?>
<bookstore xmlns="http://www.contoso.com/books">
<book genre="autobiography" publicationdate="1981-03-22" ISBN="1-861003-11-0">
<title>The Autobiography of Benjamin Franklin</title>
<author>
<first-name>Benjamin</first-name>
<last-name>Franklin</last-name>
</author>
<price>8.99</price>
</book>
<book genre="novel" publicationdate="1967-11-17" ISBN="0-201-63361-2">
<title>The Confidence Man</title>
<author>
<first-name>Herman</first-name>
<last-name>Melville</last-name>
</author>
<price>11.99</price>
</book>
<book genre="philosophy" publicationdate="1991-02-15" ISBN="1-861001-57-6">
<title>The Gorgias</title>
<author>
<name>Plato</name>
</author>
<price>9.99</price>
</book>
</bookstore>
Дополнительные сведения о методах AppendChild, PrependChild, AppendChildElement и PrependChildElement см. в справочной документации по классу XPathNavigator.
Вставка узлов атрибутов
Класс XPathNavigator предоставляет следующие методы для вставки узлов атрибутов.
Эти методы вставляют узлы атрибутов на узле элемента, XPathNavigator на который в данный момент размещается объект. Метод CreateAttribute создает узел атрибута на узле элемента, на котором в настоящее время расположен объект, используя префикс пространства имен, локальное имя, URI пространства имен и значение, указанные в качестве параметров. Метод CreateAttributes возвращает объект, используемый XmlWriter для вставки узлов атрибутов.
В следующем примере новые discount
и currency
атрибуты создаются на price
дочернем элементе первого book
элемента в contosoBooks.xml
файле с помощью XmlWriter объекта, возвращаемого методом CreateAttributes .
XmlDocument document = new XmlDocument();
document.Load("contosoBooks.xml");
XPathNavigator navigator = document.CreateNavigator();
navigator.MoveToChild("bookstore", "http://www.contoso.com/books");
navigator.MoveToChild("book", "http://www.contoso.com/books");
navigator.MoveToChild("price", "http://www.contoso.com/books");
XmlWriter attributes = navigator.CreateAttributes();
attributes.WriteAttributeString("discount", "1.00");
attributes.WriteAttributeString("currency", "USD");
attributes.Close();
navigator.MoveToParent();
Console.WriteLine(navigator.OuterXml);
Dim document As XmlDocument = New XmlDocument()
document.Load("contosoBooks.xml")
Dim navigator As XPathNavigator = document.CreateNavigator()
navigator.MoveToChild("bookstore", "http://www.contoso.com/books")
navigator.MoveToChild("book", "http://www.contoso.com/books")
navigator.MoveToChild("price", "http://www.contoso.com/books")
Dim attributes As XmlWriter = navigator.CreateAttributes()
attributes.WriteAttributeString("discount", "1.00")
attributes.WriteAttributeString("currency", "USD")
attributes.Close()
navigator.MoveToParent()
Console.WriteLine(navigator.OuterXml)
Пример принимает contosoBooks.xml
файл в качестве входных данных.
<?xml version="1.0" encoding="utf-8" ?>
<bookstore xmlns="http://www.contoso.com/books">
<book genre="autobiography" publicationdate="1981-03-22" ISBN="1-861003-11-0">
<title>The Autobiography of Benjamin Franklin</title>
<author>
<first-name>Benjamin</first-name>
<last-name>Franklin</last-name>
</author>
<price>8.99</price>
</book>
<book genre="novel" publicationdate="1967-11-17" ISBN="0-201-63361-2">
<title>The Confidence Man</title>
<author>
<first-name>Herman</first-name>
<last-name>Melville</last-name>
</author>
<price>11.99</price>
</book>
<book genre="philosophy" publicationdate="1991-02-15" ISBN="1-861001-57-6">
<title>The Gorgias</title>
<author>
<name>Plato</name>
</author>
<price>9.99</price>
</book>
</bookstore>
Дополнительные сведения о методах CreateAttribute и CreateAttributes см. в справочной документации по классу XPathNavigator.
Копирование узлов
В некоторых случаях может потребоваться заполнить XML-документ с содержимым из другого XML-документа. Класс XPathNavigator и класс XmlWriter могут копировать узлы в объект XmlDocument из существующего объекта XmlReader или объекта XPathNavigator.
Методы AppendChild, PrependChild, InsertBefore и InsertAfter класса XPathNavigator имеют перегрузки, которые могут принимать объект XPathNavigator или объект XmlReader в качестве параметра.
Метод WriteNode класса XmlWriter имеет перегрузки, которые могут принимать объект XmlNode, XmlReader или XPathNavigator.
В следующем примере копируются все book
элементы из одного документа в другой.
Dim document As XmlDocument = New XmlDocument()
document.Load("books.xml")
Dim navigator As XPathNavigator = document.CreateNavigator()
navigator.MoveToChild("bookstore", String.Empty)
Dim newBooks As XPathDocument = New XPathDocument("newBooks.xml")
Dim newBooksNavigator As XPathNavigator = newBooks.CreateNavigator()
Dim nav As XPathNavigator
For Each nav in newBooksNavigator.SelectDescendants("book", "", false)
navigator.AppendChild(nav)
Next
document.Save("newBooks.xml");
XmlDocument document = new XmlDocument();
document.Load("books.xml");
XPathNavigator navigator = document.CreateNavigator();
navigator.MoveToChild("bookstore", String.Empty);
XPathDocument newBooks = new XPathDocument("newBooks.xml");
XPathNavigator newBooksNavigator = newBooks.CreateNavigator();
foreach (XPathNavigator nav in newBooksNavigator.SelectDescendants("book", "", false))
{
navigator.AppendChild(nav);
}
document.Save("newBooks.xml");
Вставка значений
Класс XPathNavigator предоставляет SetValue и SetTypedValue методы для вставки значений XmlDocument узла в объект.
Вставка нетипизированных значений
Метод SetValue просто вставляет нетипизированное string
значение, переданное в качестве параметра, в качестве значения узла XPathNavigator , на который в данный момент размещается объект. Значение вставляется без какого-либо типа или без проверки того, что новое значение допустимо в соответствии с типом узла, если доступны сведения о схеме.
В следующем примере SetValue метод используется для обновления всех price
элементов в contosoBooks.xml
файле.
XmlDocument document = new XmlDocument();
document.Load("contosoBooks.xml");
XPathNavigator navigator = document.CreateNavigator();
XmlNamespaceManager manager = new XmlNamespaceManager(navigator.NameTable);
manager.AddNamespace("bk", "http://www.contoso.com/books");
foreach (XPathNavigator nav in navigator.Select("//bk:price", manager))
{
if (nav.Value == "11.99")
{
nav.SetValue("12.99");
}
}
Console.WriteLine(navigator.OuterXml);
Dim document As XmlDocument = New XmlDocument()
document.Load("contosoBooks.xml")
Dim navigator As XPathNavigator = document.CreateNavigator()
Dim manager As XmlNamespaceManager = New XmlNamespaceManager(navigator.NameTable)
manager.AddNamespace("bk", "http://www.contoso.com/books")
For Each nav As XPathNavigator In navigator.Select("//bk:price", manager)
If nav.Value = "11.99" Then
nav.SetValue("12.99")
End If
Next
Console.WriteLine(navigator.OuterXml)
Пример принимает contosoBooks.xml
файл в качестве входных данных.
<?xml version="1.0" encoding="utf-8" ?>
<bookstore xmlns="http://www.contoso.com/books">
<book genre="autobiography" publicationdate="1981-03-22" ISBN="1-861003-11-0">
<title>The Autobiography of Benjamin Franklin</title>
<author>
<first-name>Benjamin</first-name>
<last-name>Franklin</last-name>
</author>
<price>8.99</price>
</book>
<book genre="novel" publicationdate="1967-11-17" ISBN="0-201-63361-2">
<title>The Confidence Man</title>
<author>
<first-name>Herman</first-name>
<last-name>Melville</last-name>
</author>
<price>11.99</price>
</book>
<book genre="philosophy" publicationdate="1991-02-15" ISBN="1-861001-57-6">
<title>The Gorgias</title>
<author>
<name>Plato</name>
</author>
<price>9.99</price>
</book>
</bookstore>
Вставка типизированных значений
Если тип узла является простым типом схемы XML W3C, новое значение, вставленное SetTypedValue методом, проверяется на аспекты простого типа до установки значения. Если новое значение недопустимо в соответствии с типом узла (например, заданием значения -1
элемента, тип которого является xs:positiveInteger
), это приводит к исключению.
В следующем примере пытаются изменить значение элемента price
, который содержится в первом элементе book
в файле contosoBooks.xml
, на значение DateTime. Это приводит к исключению, потому что тип элемента price
в XML-схеме определяется как xs:decimal
в файлах contosoBooks.xsd
.
Dim settings As XmlReaderSettings = New XmlReaderSettings()
settings.Schemas.Add("http://www.contoso.com/books", "contosoBooks.xsd")
settings.ValidationType = ValidationType.Schema
Dim reader As XmlReader = XmlReader.Create("contosoBooks.xml", settings)
Dim document As XmlDocument = New XmlDocument()
document.Load(reader)
Dim navigator As XPathNavigator = document.CreateNavigator()
navigator.MoveToChild("bookstore", "http://www.contoso.com/books")
navigator.MoveToChild("book", "http://www.contoso.com/books")
navigator.MoveToChild("price", "http://www.contoso.com/books")
navigator.SetTypedValue(DateTime.Now)
XmlReaderSettings settings = new XmlReaderSettings();
settings.Schemas.Add("http://www.contoso.com/books", "contosoBooks.xsd");
settings.ValidationType = ValidationType.Schema;
XmlReader reader = XmlReader.Create("contosoBooks.xml", settings);
XmlDocument document = new XmlDocument();
document.Load(reader);
XPathNavigator navigator = document.CreateNavigator();
navigator.MoveToChild("bookstore", "http://www.contoso.com/books");
navigator.MoveToChild("book", "http://www.contoso.com/books");
navigator.MoveToChild("price", "http://www.contoso.com/books");
navigator.SetTypedValue(DateTime.Now);
Пример принимает contosoBooks.xml
файл в качестве входных данных.
<?xml version="1.0" encoding="utf-8" ?>
<bookstore xmlns="http://www.contoso.com/books">
<book genre="autobiography" publicationdate="1981-03-22" ISBN="1-861003-11-0">
<title>The Autobiography of Benjamin Franklin</title>
<author>
<first-name>Benjamin</first-name>
<last-name>Franklin</last-name>
</author>
<price>8.99</price>
</book>
<book genre="novel" publicationdate="1967-11-17" ISBN="0-201-63361-2">
<title>The Confidence Man</title>
<author>
<first-name>Herman</first-name>
<last-name>Melville</last-name>
</author>
<price>11.99</price>
</book>
<book genre="philosophy" publicationdate="1991-02-15" ISBN="1-861001-57-6">
<title>The Gorgias</title>
<author>
<name>Plato</name>
</author>
<price>9.99</price>
</book>
</bookstore>
Пример также принимает contosoBooks.xsd
в качестве входных данных.
<?xml version="1.0" encoding="utf-8"?>
<xs:schema attributeFormDefault="unqualified" elementFormDefault="qualified" targetNamespace="http://www.contoso.com/books" xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:element name="bookstore">
<xs:complexType>
<xs:sequence>
<xs:element maxOccurs="unbounded" name="book">
<xs:complexType>
<xs:sequence>
<xs:element name="title" type="xs:string" />
<xs:element name="author">
<xs:complexType>
<xs:sequence>
<xs:element minOccurs="0" name="name" type="xs:string" />
<xs:element minOccurs="0" name="first-name" type="xs:string" />
<xs:element minOccurs="0" name="last-name" type="xs:string" />
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name="price" type="xs:decimal" />
</xs:sequence>
<xs:attribute name="genre" type="xs:string" use="required" />
<xs:attribute name="publicationdate" type="xs:date" use="required" />
<xs:attribute name="ISBN" type="xs:string" use="required" />
</xs:complexType>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:schema>
Свойства InnerXml и OuterXml
Свойства InnerXml и OuterXml класса XPathNavigator изменяют XML-разметку узлов, над которыми в настоящее время находится объект XPathNavigator.
Свойство InnerXml изменяет XML-разметку дочерних узлов XPathNavigator, на которых сейчас находится объект, используя проанализированное содержимое заданного XML string
.
OuterXml Аналогичным образом свойство изменяет XML-разметку дочерних XPathNavigator узлов, на которые в настоящее время размещается объект, а также на текущем узле.
Помимо методов, описанных в этом разделе, свойства InnerXml и OuterXml можно использовать для вставки узлов и значений в XML-документ. Дополнительные сведения об использовании InnerXml и OuterXml свойствах для вставки узлов и значений см. в разделе " Изменение XML-данных с помощью XPathNavigator ".
Пространство имен и конфликты "xml:lang"
Некоторые конфликты, связанные с объёмом пространства имен и xml:lang
объявлений, могут возникать при вставке XML-данных с помощью методов InsertBefore, InsertAfter, AppendChild и PrependChild класса XPathNavigator, которые принимают XmlReader объекты в качестве параметров.
Ниже приведены возможные конфликты пространства имен.
Если в контексте объекта XmlReader есть пространство имен, но сопоставление префикса с URI этого пространства отсутствует в контексте объекта XPathNavigator, новое объявление пространства имен добавляется к только что вставленному узлу.
Если один и тот же URI пространства имен находится в области действия как в контексте объекта XmlReader, так и в контексте объекта XPathNavigator, но имеет другой префикс, сопоставленный с ним в обоих контекстах, то новое объявление пространства имен добавляется в только что вставленный узел, причем префикс и URI пространства имен берутся из объекта XmlReader.
Если один и тот же префикс пространства имен находится в области действия как в контексте объекта XmlReader, так и в контексте объекта XPathNavigator, но в обоих контекстах к нему сопоставлен другой URI пространства имен, то к только что вставленному узлу добавляется новое объявление пространства имен, которое повторно объявляет этот префикс с URI пространства имен, взятым из объекта XmlReader.
Если префикс и URI пространства имен в контексте объекта XmlReader, а также в контексте объекта XPathNavigator совпадают, новое объявление пространства имен не добавляется в недавно вставленный узел.
Замечание
Описание выше также относится к объявлениям пространства имен с пустым string
префиксом (например, объявление пространства имен по умолчанию).
Ниже приведены возможные xml:lang
конфликты.
Если в контексте объекта
xml:lang
есть атрибут XmlReader, но в контексте объекта XPathNavigator его нет, то атрибутxml:lang
, значение которого берется из объекта XmlReader, добавляется к недавно вставленному узлу.Если
xml:lang
атрибут находится в области видимости и в контексте XmlReader объекта, и в контексте XPathNavigator объекта, но у каждого из них разное значение, атрибутxml:lang
, значение которого взято из объекта XmlReader, добавляется в только что вставленный узел.Если в контексте объекта
xml:lang
и в контексте объекта XmlReader есть XPathNavigator атрибут, но каждый из них с одинаковым значением, новыйxml:lang
атрибут не добавляется на только что вставленном узле.Если в контексте объекта имеется атрибут
xml:lang
в области XPathNavigator, но его нет в контексте объекта XmlReader, то к только что вставленному узлу не добавляется никакой атрибутxml:lang
.
Вставка узлов с помощью XmlWriter
Методы, используемые для вставки соседних, дочерних узлов и узлов атрибутов, описанные в разделе "Вставка узлов и значений", перегружены. Методы InsertAfter, InsertBefore, AppendChild, PrependChild и CreateAttributes класса XPathNavigator возвращают объект XmlWriter, используемый для вставки узлов.
Неподдерживаемые методы XmlWriter
Не все методы, используемые для записи сведений в XML-документ с помощью XmlWriter класса, поддерживаются XPathNavigator классом из-за разницы между моделью данных XPath и объектной моделью документа (DOM).
В следующей таблице описаны XmlWriter методы класса, которые не поддерживаются классом XPathNavigator .
Метод | Описание |
---|---|
WriteEntityRef | Создает NotSupportedException исключение. |
WriteDocType | Игнорируется на корневом уровне и вызывает исключение NotSupportedException, если вызвать его на любом другом уровне в XML-документе. |
WriteCData | Обрабатывается как вызов метода WriteString для соответствующего символа или символов. |
WriteCharEntity | Обрабатывается как вызов метода WriteString для соответствующего символа или символов. |
WriteSurrogateCharEntity | Обрабатывается как вызов метода WriteString для соответствующего символа или символов. |
Дополнительные сведения о классе XmlWriter см. в справочной документации по классу XmlWriter.
Несколько объектов XmlWriter
Можно использовать несколько объектов, указывающих XPathNavigator на различные части XML-документа с одним или несколькими открытыми XmlWriter объектами. Несколько XmlWriter объектов разрешены и поддерживаются в однопоточных сценариях.
Ниже приведены важные примечания, которые следует учитывать при использовании нескольких XmlWriter объектов.
Фрагменты XML, написанные объектами XmlWriter, добавляются в XML-документ при вызове метода Close каждого объекта XmlWriter. До этого момента XmlWriter объект записывает отключенный фрагмент. Если операция выполняется в XML-документе, любые фрагменты, записываемые объектом XmlWriter, до вызова Close не затрагиваются.
Если в определённом поддереве XML есть открытый XmlWriter объект и это поддерево удаляется, XmlWriter объект может по-прежнему добавляться в поддерево. Поддерево просто-напросто становится фрагментом, который был удален.
Если несколько XmlWriter объектов открываются в одной точке XML-документа, они добавляются в XML-документ в том порядке, в котором объекты закрыты, а не в том порядке XmlWriter , в котором они были открыты.
В следующем примере создается XmlDocument объект, создается XPathNavigator объект, а затем используется XmlWriter объект, возвращаемый PrependChild методом, для создания структуры первой книги в books.xml
файле. Затем этот пример сохраняет его в виде book.xml
файла.
Dim document As XmlDocument = New XmlDocument()
Dim navigator As XPathNavigator = document.CreateNavigator()
Using writer As XmlWriter = navigator.PrependChild()
writer.WriteStartElement("bookstore")
writer.WriteStartElement("book")
writer.WriteAttributeString("genre", "autobiography")
writer.WriteAttributeString("publicationdate", "1981-03-22")
writer.WriteAttributeString("ISBN", "1-861003-11-0")
writer.WriteElementString("title", "The Autobiography of Benjamin Franklin")
writer.WriteStartElement("author")
writer.WriteElementString("first-name", "Benjamin")
writer.WriteElementString("last-name", "Franklin")
writer.WriteElementString("price", "8.99")
writer.WriteEndElement()
writer.WriteEndElement()
writer.WriteEndElement()
End Using
document.Save("book.xml")
XmlDocument document = new XmlDocument();
XPathNavigator navigator = document.CreateNavigator();
using (XmlWriter writer = navigator.PrependChild())
{
writer.WriteStartElement("bookstore");
writer.WriteStartElement("book");
writer.WriteAttributeString("genre", "autobiography");
writer.WriteAttributeString("publicationdate", "1981-03-22");
writer.WriteAttributeString("ISBN", "1-861003-11-0");
writer.WriteElementString("title", "The Autobiography of Benjamin Franklin");
writer.WriteStartElement("author");
writer.WriteElementString("first-name", "Benjamin");
writer.WriteElementString("last-name", "Franklin");
writer.WriteElementString("price", "8.99");
writer.WriteEndElement();
writer.WriteEndElement();
writer.WriteEndElement();
}
document.Save("book.xml");
Сохранение XML-документа
Сохранение изменений, XmlDocument внесенных в объект в результате методов, описанных в этом разделе, выполняется с помощью методов XmlDocument класса. Дополнительные сведения о сохранении изменений, внесенных XmlDocument в объект, см. в разделе "Сохранение и запись документа".