XmlReader.ReadOuterXml XmlReader.ReadOuterXml XmlReader.ReadOuterXml XmlReader.ReadOuterXml Method

定义

当在派生类中被重写时,读取表示该节点和所有它的子级的内容(包括标记)。When overridden in a derived class, reads the content, including markup, representing this node and all its children.

public:
 virtual System::String ^ ReadOuterXml();
public virtual string ReadOuterXml ();
abstract member ReadOuterXml : unit -> string
override this.ReadOuterXml : unit -> string
Public Overridable Function ReadOuterXml () As String

返回

如果读取器定位在元素或属性节点上,此方法将返回当前节点及其所有子级的所有 XML 内容(包括标记);否则返回空字符串。If the reader is positioned on an element or an attribute node, this method returns all the XML content, including markup, of the current node and all its children; otherwise, it returns an empty string.

异常

XML 的格式不良,或分析 XML 时出错。The XML was not well-formed, or an error occurred while parsing the XML.

在上一次异步操作完成之前调用了 XmlReader 方法。An XmlReader method was called before a previous asynchronous operation finished. 在此情况下,会引发 InvalidOperationException 并显示消息“异步操作已在进行中。”In this case, InvalidOperationException is thrown with the message "An asynchronous operation is already in progress."

示例

下面的示例对ReadInnerXmlReadOuterXml方法进行比较。The following example compares the ReadInnerXml and ReadOuterXml methods.

// Load the file and ignore all white space.
XmlReaderSettings settings = new XmlReaderSettings();
settings.IgnoreWhitespace = true;
using (XmlReader reader = XmlReader.Create("2books.xml")) {

  // Moves the reader to the root element.
  reader.MoveToContent();
 
  // Moves to book node.
  reader.Read(); 

  // Note that ReadInnerXml only returns the markup of the node's children
  // so the book's attributes are not returned.
  Console.WriteLine("Read the first book using ReadInnerXml...");
  Console.WriteLine(reader.ReadInnerXml());

  // ReadOuterXml returns the markup for the current node and its children
  // so the book's attributes are also returned.
  Console.WriteLine("Read the second book using ReadOuterXml...");
  Console.WriteLine(reader.ReadOuterXml());      

}
' Load the file and ignore all white space.
Dim settings As New XmlReaderSettings()
settings.IgnoreWhitespace = True
Using reader As XmlReader = XmlReader.Create("2books.xml")

  ' Moves the reader to the root element.
  reader.MoveToContent()
                
  ' Moves to book node.
  reader.Read()
                
  ' Note that ReadInnerXml only returns the markup of the node's children
  ' so the book's attributes are not returned.
  Console.WriteLine("Read the first book using ReadInnerXml...")
  Console.WriteLine(reader.ReadInnerXml())
                
  ' ReadOuterXml returns the markup for the current node and its children
  ' so the book's attributes are also returned.
  Console.WriteLine("Read the second book using ReadOuterXml...")
  Console.WriteLine(reader.ReadOuterXml())

End Using

该示例使用2books.xml文件作为输入。The example uses 2books.xml file as input.

<!--sample XML fragment-->
<bookstore>
  <book genre='novel' ISBN='10-861003-324'>
    <title>The Handmaid's Tale</title>
    <price>19.95</price>
  </book>
  <book genre='novel' ISBN='1-861001-57-5'>
    <title>Pride And Prejudice</title>
    <price>24.95</price>
  </book>
</bookstore>

注解

此方法类似于, ReadInnerXml只不过它还返回开始标记和结束标记。This method is similar to ReadInnerXml except it also returns the start and end tags.

此方法按以下方式处理元素节点和属性节点:This method handles element and attribute nodes in the following manner:

节点类型Node type 调用之前的位置Position before the call XML 片断XML fragment 返回值Return value 调用后的位置Position After the Call
Element item1 开始标记上。On the item1 start tag. <item1>text1</item1><item2>text2</item2><item1>text1</item1><item2>text2</item2> <item1>text1</item1><item1>text1</item1> item2 开始标记上。On the item2 start tag.
Attribute attr1 属性节点上。On the attr1 attribute node. <item attr1="val1" attr2="val2">text</item><item attr1="val1" attr2="val2">text</item> attr1="val1"attr1="val1" 保留在 attr1 属性节点上。Remains on the attr1 attribute node.

如果读取器定位在叶节点上,则调用 ReadOuterXml 等效于调用 ReadIf the reader is positioned on a leaf node, calling ReadOuterXml is equivalent to calling Read. 方法返回String.Empty (属性节点除外,在这种情况下,将返回特性标记)。The method returns String.Empty (except for attribute nodes, in which case the attribute markup is returned).

此方法检查格式正确的 XML。This method checks for well-formed XML. ReadOuterXml 如果XmlValidatingReader从调用,则此方法还会验证返回的内容If ReadOuterXml is called from an XmlValidatingReader, this method also validates the content returned

XmlNodeReader、和ReadOuterXml XmlTextReader 类中实现时,方法是识别XmlValidatingReader命名空间的。As implemented in the XmlNodeReader, XmlTextReader and XmlValidatingReader classes the ReadOuterXml method is namespace aware. 给定<A xmlns:S="urn:1"><S:B>hello</S:B></A>以下 XML 文本,如果读取器定位S:B在开始标记上, ReadOuterXml则返回<S:B xmlns:S="urn:1">hello<S:B/>Given the following XML text <A xmlns:S="urn:1"><S:B>hello</S:B></A>, if the reader were positioned on the S:B start tag, ReadOuterXml returns <S:B xmlns:S="urn:1">hello<S:B/>.

有关此方法的异步版本,请参阅ReadOuterXmlAsyncFor the asynchronous version of this method, see ReadOuterXmlAsync.

适用于