XmlWriter.WriteNode 方法
定义
重要
一些信息与预发行产品相关,相应产品在发行之前可能会进行重大修改。 对于此处提供的信息,Microsoft 不作任何明示或暗示的担保。
将所有内容从源对象复制到当前写入器实例。
重载
WriteNode(XmlReader, Boolean) |
当在派生类中被重写时,将全部内容从读取器复制到写入器并将读取器移动到下一个同级的开始位置。 |
WriteNode(XPathNavigator, Boolean) |
将所有内容从 XPathNavigator 对象复制到编写器。 XPathNavigator 的位置保持不变。 |
注解
有关此方法的异步版本,请参阅 WriteNodeAsync。
WriteNode(XmlReader, Boolean)
- Source:
- XmlWriter.cs
- Source:
- XmlWriter.cs
- Source:
- 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
,则从 XmlReader
中复制默认属性;否则为 false
。
例外
reader
为 null
。
reader
包含无效字符。
在上一次异步操作完成之前调用了 XmlWriter 方法。 在此情况下,会引发 InvalidOperationException 并显示消息“异步操作已在进行中。”
示例
以下示例将第一个和最后一个书籍节点写入控制台。
#using <System.Xml.dll>
using namespace System;
using namespace System::IO;
using namespace System::Xml;
int main()
{
XmlTextReader^ reader = gcnew 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 = gcnew 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();
}
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 |
写出 end 元素标记。 |
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)
- Source:
- XmlWriter.cs
- Source:
- XmlWriter.cs
- Source:
- 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。