Compartir vía


XNode.CreateReader Método

Definición

Crea un objeto XmlReader para este nodo.

Sobrecargas

CreateReader()

Crea un objeto XmlReader para este nodo.

CreateReader(ReaderOptions)

Crea una clase XmlReader con las opciones especificadas por el parámetro readerOptions.

CreateReader()

Crea un objeto XmlReader para este nodo.

public:
 System::Xml::XmlReader ^ CreateReader();
public System.Xml.XmlReader CreateReader ();
member this.CreateReader : unit -> System.Xml.XmlReader
Public Function CreateReader () As XmlReader

Devoluciones

XmlReader

Objeto XmlReader que se puede usar para leer este nodo y sus descendientes.

Ejemplos

En el ejemplo siguiente se crea un árbol XML, se crea mediante XmlReader el CreateReader método y se crea mediante XmlDocument el lector.

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);  
Dim xmlTree As XDocument =  _   
    <?xml version="1.0" encoding="utf-8" standalone="yes"?>  
        <Root Att1="Attribute Content">  
            <Child1>1</Child1>  
            <Child2>2</Child2>  
        </Root>  
Dim reader As XmlReader = xmlTree.CreateReader()  
reader.MoveToContent()  
Dim doc As XmlDocument = New XmlDocument()  
Dim cd As XmlNode = doc.ReadNode(reader)  
doc.AppendChild(cd)  
Console.WriteLine(doc.OuterXml)  

Este ejemplo produce el siguiente resultado:

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

Otro uso de este método es realizar una transformación XSLT. Puede crear un árbol XML, crear un objeto XmlReader desde el árbol XML, crear un nuevo documento y crear un objeto XmlWriter que escribirá en el nuevo documento. A continuación, puede invocar la transformación XSLT y pasar XmlReader y XmlWriter a la transformación. Después de que se complete correctamente la transformación, se rellenará el nuevo árbol XML con los resultados de la transformación.

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);  
Dim xslMarkup As XDocument = _   
    <?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>  

Dim xmlTree As XElement = _   
        <Parent>  
            <Child1>Child1 data</Child1>  
            <Child2>Child2 data</Child2>  
        </Parent>  

Dim newTree As XDocument = New XDocument()  

Using writer As XmlWriter = newTree.CreateWriter()  
    ' Load the style sheet.  
    Dim xslt As XslCompiledTransform = _  
        New XslCompiledTransform()  
    xslt.Load(xslMarkup.CreateReader())  

    ' Execute the transform and output the results to a writer.  
    xslt.Transform(xmlTree.CreateReader(), writer)  
End Using  

Console.WriteLine(newTree)  

Este ejemplo produce el siguiente resultado:

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

Comentarios

Normalmente se usa este método cuando se tiene que proporcionar otro componente con .XmlReader Por ejemplo, puede crear un XmlReader a partir de un árbol de LINQ to XML y, a continuación, pasar ese lector a Load.

Todos los lectores devueltos por Create están normalizando los lectores. Siempre realizan la normalización de saltos de línea y la normalización completa de los atributos. Por el contrario, el XmlReader devuelto por CreateReader no es un lector de normalización. No transforma ningún espacio en blanco. También devuelve atributos en el orden en que se agregaron, no en el orden de los nombres de atributo.

LINQ to XML no mantiene información sobre si los atributos son atributos predeterminados. IsDefault siempre devolverá false independientemente de si el atributo se ha rellenado a partir de un valor predeterminado o no.

Los PUBLIC atributos y SYSTEM en XDocumentType no están disponibles a través del XmlReader.MoveToAttribute método . Solo están disponibles a través del XmlReader.GetAttribute método que toma el nombre completo del atributo como parámetro. Si tiene que recuperar los PUBLIC atributos o SYSTEM , debe usar el XmlReader.GetAttribute método .

No se admiten datos base64 ni BinHex. Si intenta recuperar estos tipos de datos (por ejemplo, llamando a ReadElementContentAsBase64), el lector producirá NotSupportedException.

El lector no expone la xml declaración. Durante la lectura, no encontrará un nodo de tipo XmlDeclaration.

Consulte también

Se aplica a

CreateReader(ReaderOptions)

Crea una clase XmlReader con las opciones especificadas por el parámetro readerOptions.

public:
 System::Xml::XmlReader ^ CreateReader(System::Xml::Linq::ReaderOptions readerOptions);
public System.Xml.XmlReader CreateReader (System.Xml.Linq.ReaderOptions readerOptions);
member this.CreateReader : System.Xml.Linq.ReaderOptions -> System.Xml.XmlReader
Public Function CreateReader (readerOptions As ReaderOptions) As XmlReader

Parámetros

readerOptions
ReaderOptions

Objeto ReaderOptions que especifica si se van a omitir los espacios de nombres duplicados.

Devoluciones

XmlReader

Un objeto XmlReader.

Se aplica a