XmlWriter.WriteNode Метод
Определение
Важно!
Некоторые сведения относятся к предварительной версии продукта, в которую до выпуска могут быть внесены существенные изменения. Майкрософт не предоставляет никаких гарантий, явных или подразумеваемых, относительно приведенных здесь сведений.
Копирует все данные из исходного объекта в текущий экземпляр записи.
Перегрузки
| Имя | Описание |
|---|---|
| WriteNode(XmlReader, Boolean) |
При переопределении в производном классе копирует все данные от читателя к средству записи и перемещает читателя в начало следующего брата. |
| WriteNode(XPathNavigator, Boolean) |
Копирует все данные из XPathNavigator объекта в модуль записи. Положение XPathNavigator осталось неизменным. |
Комментарии
Сведения об асинхронной версии этого метода см. в разделе WriteNodeAsync.
WriteNode(XmlReader, Boolean)
- Исходный код:
- XmlWriter.cs
- Исходный код:
- XmlWriter.cs
- Исходный код:
- XmlWriter.cs
- Исходный код:
- XmlWriter.cs
- Исходный код:
- XmlWriter.cs
При переопределении в производном классе копирует все данные от читателя к средству записи и перемещает читателя в начало следующего брата.
public:
virtual void WriteNode(System::Xml::XmlReader ^ reader, bool defattr);
public virtual void WriteNode(System.Xml.XmlReader reader, bool defattr);
abstract member WriteNode : System.Xml.XmlReader * bool -> unit
override this.WriteNode : System.Xml.XmlReader * bool -> unit
Public Overridable Sub WriteNode (reader As XmlReader, defattr As Boolean)
Параметры
- defattr
- Boolean
trueЗначение , falseчтобы скопировать атрибуты по умолчанию из ; XmlReaderв противном случае .
Исключения
reader равно null.
reader содержит недопустимые символы.
Метод XmlWriter был вызван до завершения предыдущей асинхронной операции. В этом случае InvalidOperationException создается сообщение "Асинхронная операция уже выполняется".
Примеры
В следующем примере в консоль записывается первый и последний узлы книги.
using System;
using System.IO;
using System.Xml;
public class Sample{
public static void Main(){
XmlTextReader reader = new XmlTextReader("books.xml");
reader.WhitespaceHandling = WhitespaceHandling.None;
//Move the reader to the first book element.
reader.MoveToContent();
reader.Read();
//Create a writer that outputs to the console.
XmlTextWriter writer = new XmlTextWriter (Console.Out);
writer.Formatting = Formatting.Indented;
//Write the start tag.
writer.WriteStartElement("myBooks");
//Write the first book.
writer.WriteNode(reader, false);
//Skip the second book.
reader.Skip();
//Write the last book.
writer.WriteNode(reader, false);
writer.WriteEndElement();
//Close the writer and the reader.
writer.Close();
reader.Close();
}
}
Imports System.IO
Imports System.Xml
public class Sample
public shared sub Main()
Dim reader as XmlTextReader = new XmlTextReader("books.xml")
reader.WhitespaceHandling = WhitespaceHandling.None
'Move the reader to the first book element.
reader.MoveToContent()
reader.Read()
'Create a writer that outputs to the console.
Dim writer as XmlTextWriter = new XmlTextWriter (Console.Out)
writer.Formatting = Formatting.Indented
'Write the start tag.
writer.WriteStartElement("myBooks")
'Write the first book.
writer.WriteNode(reader, false)
'Skip the second book.
reader.Skip()
'Write the last book.
writer.WriteNode(reader, false)
writer.WriteEndElement()
'Close the writer and the reader.
writer.Close()
reader.Close()
end sub
end class
В этом примере файл books.xmlиспользуется в качестве входных данных.
<bookstore>
<book genre="autobiography" publicationdate="1981" 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" 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" ISBN="1-861001-57-6">
<title>The Gorgias</title>
<author>
<name>Plato</name>
</author>
<price>9.99</price>
</book>
</bookstore>
Комментарии
В следующей таблице показаны поддерживаемые типы узлов для этого метода.
| NodeType | Поведение writeNode |
|---|---|
None |
Записывает все узлы независимо от типа. То есть модуль записи использует XmlReader и записывает все узлы, включая атрибуты, инструкции по обработке, комментарии и т. д. Эта ситуация возникает, когда XmlReader оно находится в исходном состоянии. (Свойство XmlReader.ReadState возвращается ReaderState.Initial). |
Element |
Записывает узел элемента и все узлы атрибутов. |
Attribute |
Нет операции. Вместо этого используются типы WriteStartAttribute или WriteAttributeString. |
Text |
Записывает текстовый узел. |
CDATA |
Записывает узел раздела CDATA. |
EntityReference |
Записывает узел ссылки на сущность. |
ProcessingInstruction |
Записывает узел инструкции обработки. |
Comment |
Записывает узел комментариев. |
DocumentType |
Записывает узел типа документа. |
SignificantWhitespace |
Записывает значительный узел пробела. |
Whitespace |
Записывает узел пробела. |
EndElement |
Записывает тег конечного элемента. |
EndEntity |
Нет операции. |
XmlDeclaration |
Записывает узел объявления XML. |
Если средство чтения находится в начальном состоянии, этот метод перемещает средство чтения в конец файла. Если средство чтения уже находится в конце файла или в закрытом состоянии, этот метод не работает.
Следующий код C# копирует весь xml-входной документ в консоль:
XmlReader reader = XmlReader.Create(myfile);
XmlWriter writer = XmlWriter.Create(Console.Out);
writer.WriteNode(reader, false);
При перемещении корневого узла и расположении в другом месте документа, приведенном в следующем примере C#, правильно записывает узлы.
XmlReader reader = XmlReader.Create(myfile);
reader.Read(); // Read PI
reader.Read(); // Read Comment
reader.Read(); // Read DOCType
XmlWriter writer = XmlWriter.Create(Console.Out);
while (!reader.EOF){
writer.WriteNode(reader, false);
}
Если средство чтения настроено для возврата пробела, а средство записи настроено для отступа выходных данных, WriteNode может привести к странным выходным данным. По сути, вы получите двойное форматирование.
Сведения об асинхронной версии этого метода см. в разделе WriteNodeAsync.
Применяется к
WriteNode(XPathNavigator, Boolean)
- Исходный код:
- XmlWriter.cs
- Исходный код:
- XmlWriter.cs
- Исходный код:
- XmlWriter.cs
- Исходный код:
- XmlWriter.cs
- Исходный код:
- XmlWriter.cs
Копирует все данные из XPathNavigator объекта в модуль записи. Положение XPathNavigator осталось неизменным.
public:
virtual void WriteNode(System::Xml::XPath::XPathNavigator ^ navigator, bool defattr);
public virtual void WriteNode(System.Xml.XPath.XPathNavigator navigator, bool defattr);
abstract member WriteNode : System.Xml.XPath.XPathNavigator * bool -> unit
override this.WriteNode : System.Xml.XPath.XPathNavigator * bool -> unit
Public Overridable Sub WriteNode (navigator As XPathNavigator, defattr As Boolean)
Параметры
- navigator
- XPathNavigator
Копия XPathNavigator из.
- defattr
- Boolean
true для копирования атрибутов по умолчанию; falseв противном случае .
Исключения
navigator равно null.
Метод XmlWriter был вызван до завершения предыдущей асинхронной операции. В этом случае InvalidOperationException создается сообщение "Асинхронная операция уже выполняется".
Примеры
В следующем примере метод используется WriteNode для копирования первого узла книги из документа и записи его в консоль.
using System;
using System.IO;
using System.Xml;
using System.Xml.XPath;
public class Sample
{
public static void Main()
{
XPathDocument doc = new XPathDocument("books.xml");
XPathNavigator nav = doc.CreateNavigator();
// Create a writer that outputs to the console.
XmlWriter writer = XmlWriter.Create(Console.Out);
// Write the start tag.
writer.WriteStartElement("myBooks");
// Write the first book.
nav.MoveToChild("bookstore", "");
nav.MoveToChild("book", "");
writer.WriteNode(nav, false);
// Close the start tag.
writer.WriteEndElement();
// Close the writer.
writer.Close();
}
}
Imports System.IO
Imports System.Xml
Imports System.Xml.XPath
Module Module1
Sub Main()
Dim doc As XPathDocument = New XPathDocument("books.xml")
Dim nav As XPathNavigator = doc.CreateNavigator()
' Create a writer that outputs to the console.
Dim writer As XmlWriter = XmlWriter.Create(Console.Out)
' Write the start tag.
writer.WriteStartElement("myBooks")
' Write the first book.
nav.MoveToChild("bookstore", "")
nav.MoveToChild("book", "")
writer.WriteNode(nav, False)
' Close the start tag.
writer.WriteEndElement()
' Close the writer.
writer.Close()
End Sub
End Module
В этом примере в качестве входных данных используется файл books.xml.
<?xml version="1.0" encoding="utf-8" ?>
<bookstore>
<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>
Комментарии
В следующей таблице показаны поддерживаемые XPath типы узлов для этого метода.
| XPathNodeType | Поведение writeNode |
|---|---|
Root |
Записывает все узлы независимо от типа. То есть модуль записи использует XPathNavigator и записывает все узлы из корневого узла (включая атрибуты, инструкции обработки, комментарии и т. д.). |
Element |
Записывает узел элемента и все узлы атрибутов. |
Attribute |
Нет операции. Вместо этого используются типы WriteStartAttribute или WriteAttributeString. |
Text |
Записывает текстовый узел. |
Namespace |
Нет операции. WriteStartAttribute Используйте метод или WriteAttributeString метод для записи объявления пространства имен. |
ProcessingInstruction |
Записывает узел инструкции обработки. |
Comment |
Записывает узел комментариев. |
SignificantWhitespace |
Записывает значительный узел пробела. |
Whitespace |
Записывает узел пробела. |
Сведения об асинхронной версии этого метода см. в разделе WriteNodeAsync.