XNode.CreateReader Method

Definition

Creates an XmlReader for this node.

Overloads

CreateReader()

Creates an XmlReader for this node.

CreateReader(ReaderOptions)

Creates an XmlReader with the options specified by the readerOptions parameter.

CreateReader()

Source:
XNode.cs
Source:
XNode.cs
Source:
XNode.cs

Creates an XmlReader for this node.

public System.Xml.XmlReader CreateReader ();

Returns

An XmlReader that can be used to read this node and its descendants.

Examples

The following example creates an XML tree, creates an XmlReader by using the CreateReader method, and creates an XmlDocument by using the reader.

XDocument xmlTree = new XDocument(  
    new XElement("Root",  
        new XAttribute("Att1", "Attribute Content"),  
        new XElement("Child1", 1),  
        new XElement("Child2", 2)  
    )  
);  
XmlReader reader = xmlTree.CreateReader();  
reader.MoveToContent();  
XmlDocument doc = new XmlDocument();  
XmlNode cd = doc.ReadNode(reader);  
doc.AppendChild(cd);  
Console.WriteLine(doc.OuterXml);  

This example produces the following output:

<Root Att1="Attribute Content"><Child1>1</Child1><Child2>2</Child2></Root>  

Another use for this method is to do an XSLT transformation. You can create an XML tree, create an XmlReader from the XML tree, create a new document, and create an XmlWriter that will write into the new document. Then, you can invoke the XSLT transformation, passing the XmlReader and XmlWriter to the transformation. After the transformation successfully completes, the new XML tree is populated with the results of the transform.

string xslMarkup = @"<?xml version='1.0'?>  
<xsl:stylesheet xmlns:xsl='http://www.w3.org/1999/XSL/Transform' version='1.0'>  
    <xsl:template match='/Parent'>  
        <Root>  
            <C1>  
            <xsl:value-of select='Child1'/>  
            </C1>  
            <C2>  
            <xsl:value-of select='Child2'/>  
            </C2>  
        </Root>  
    </xsl:template>  
</xsl:stylesheet>";  

XDocument xmlTree = new XDocument(  
    new XElement("Parent",  
        new XElement("Child1", "Child1 data"),  
        new XElement("Child2", "Child2 data")  
    )  
);  

XDocument newTree = new XDocument();  
using (XmlWriter writer = newTree.CreateWriter()) {  
    // Load the style sheet.  
    XslCompiledTransform xslt = new XslCompiledTransform();  
    xslt.Load(XmlReader.Create(new StringReader(xslMarkup)));  

    // Execute the transform and output the results to a writer.  
    xslt.Transform(xmlTree.CreateReader(), writer);  
}  

Console.WriteLine(newTree);  

This example produces the following output:

<Root>  
  <C1>Child1 data</C1>  
  <C2>Child2 data</C2>  
</Root>  

Remarks

You typically use this method when you have to supply another component with an XmlReader. For example, you can create an XmlReader from a LINQ to XML tree, and then pass that reader to Load.

All of the readers returned by Create are normalizing readers. They always perform line break normalization and full normalization of attributes. In contrast, the XmlReader returned by CreateReader is not a normalizing reader. It does not transform any white space. It also returns attributes in the order that they were added, not in attribute name order.

LINQ to XML does not keep information about whether attributes are default attributes. IsDefault will always return false regardless of whether the attribute was populated from a default value or not.

The PUBLIC and SYSTEM pseudo attributes on XDocumentType are not available through the XmlReader.MoveToAttribute method. They are only available through the XmlReader.GetAttribute method that takes the qualified name of the attribute as a parameter. If you have to retrieve the PUBLIC or SYSTEM attributes, you should use the XmlReader.GetAttribute method.

Base64 and BinHex data are not supported. If you attempt to retrieve these types of data (for example, by calling ReadElementContentAsBase64), the reader will throw NotSupportedException.

The xml declaration is not surfaced by the reader. While reading, you will not encounter a node of type XmlDeclaration.

See also

Applies to

.NET 9 and other versions
Product Versions
.NET Core 1.0, Core 1.1, Core 2.0, Core 2.1, Core 2.2, Core 3.0, Core 3.1, 5, 6, 7, 8, 9
.NET Framework 3.5, 4.0, 4.5, 4.5.1, 4.5.2, 4.6, 4.6.1, 4.6.2, 4.7, 4.7.1, 4.7.2, 4.8, 4.8.1
.NET Standard 1.0, 1.1, 1.2, 1.3, 1.4, 1.6, 2.0, 2.1
UWP 10.0

CreateReader(ReaderOptions)

Source:
XNode.cs
Source:
XNode.cs
Source:
XNode.cs

Creates an XmlReader with the options specified by the readerOptions parameter.

public System.Xml.XmlReader CreateReader (System.Xml.Linq.ReaderOptions readerOptions);

Parameters

readerOptions
ReaderOptions

A ReaderOptions object that specifies whether to omit duplicate namespaces.

Returns

An XmlReader object.

Applies to

.NET 9 and other versions
Product Versions
.NET Core 1.0, Core 1.1, Core 2.0, Core 2.1, Core 2.2, Core 3.0, Core 3.1, 5, 6, 7, 8, 9
.NET Framework 4.0, 4.5, 4.5.1, 4.5.2, 4.6, 4.6.1, 4.6.2, 4.7, 4.7.1, 4.7.2, 4.8, 4.8.1
.NET Standard 1.0, 1.1, 1.2, 1.3, 1.4, 1.6, 2.0, 2.1
UWP 10.0