XmlReader.ReadOuterXml Method
Definition
Important
Some information relates to prerelease product that may be substantially modified before it’s released. Microsoft makes no warranties, express or implied, with respect to the information provided here.
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
Returns
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.
Exceptions
The XML was not well-formed, or an error occurred while parsing the XML.
An XmlReader method was called before a previous asynchronous operation finished. In this case, InvalidOperationException is thrown with the message "An asynchronous operation is already in progress."
Examples
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
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>
Remarks
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 fragment | Return value | Position After the Call |
---|---|---|---|---|
Element |
On the item1 start tag. |
<item1>text1</item1><item2>text2</item2> | <item1>text1</item1> | On the item2 start tag. |
Attribute |
On the attr1 attribute node. |
<item attr1="val1" attr2="val2">text</item> | attr1="val1" | Remains on the attr1 attribute node. |
If the reader is positioned on a leaf node, calling ReadOuterXml
is equivalent to calling Read. The method returns String.Empty
(except for attribute nodes, in which case the attribute markup is returned).
This method checks for well-formed XML. If ReadOuterXml
is called from an XmlValidatingReader, this method also validates the content returned
As implemented in the XmlNodeReader, XmlTextReader and XmlValidatingReader
classes the ReadOuterXml
method is namespace aware. 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/>
.
For the asynchronous version of this method, see ReadOuterXmlAsync.