XNode.CreateReader Método

Definição

Cria um XmlReader para este nó.

Sobrecargas

CreateReader()

Cria um XmlReader para este nó.

CreateReader(ReaderOptions)

Cria um XmlReader com as opções especificadas pelo parâmetro readerOptions.

CreateReader()

Cria um XmlReader para este nó.

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

Retornos

XmlReader

Um XmlReader que pode ser usado para ler esse nó e seus descendentes.

Exemplos

O exemplo a seguir cria uma árvore XML, cria uma XmlReader usando o CreateReader método e cria uma XmlDocument usando o leitor.

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)  

Esse exemplo gera a saída a seguir:

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

Outro uso para esse método é fazer uma transformação XSLT. Você pode criar uma árvore XML, criar um XmlReader na árvore XML, criar um novo documento e criar um XmlWriter que gravarão no novo documento. Em seguida, você pode chamar a transformação XSLT, passando XmlReader e XmlWriter para a transformação. Depois que a transformação for concluída com êxito, a nova árvore XML será populada com os resultados da transformação.

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)  

Esse exemplo gera a saída a seguir:

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

Comentários

Normalmente, você usa esse método quando precisa fornecer outro componente com um XmlReader. Por exemplo, você pode criar uma XmlReader árvore de LINQ to XML e, em seguida, passar esse leitor para Load.

Todos os leitores retornados estão Create normalizando os leitores. Eles sempre executam a normalização de quebra de linha e a normalização completa dos atributos. Por outro lado, o XmlReader retornado por CreateReader não é um leitor normalizador. Ele não transforma nenhum espaço em branco. Ele também retorna atributos na ordem em que foram adicionados, não na ordem de nome do atributo.

LINQ to XML não mantém informações sobre se os atributos são atributos padrão. IsDefault sempre retornará false, independentemente de o atributo ter sido preenchido de um valor padrão ou não.

Os PUBLIC atributos XDocumentType e SYSTEM pseudo não estão disponíveis por meio do XmlReader.MoveToAttribute método. Elas só estão disponíveis por meio do XmlReader.GetAttribute método que usa o nome qualificado do atributo como um parâmetro. Se você precisar recuperar os atributos ou SYSTEM os PUBLIC atributos, deverá usar o XmlReader.GetAttribute método.

Não há suporte para dados Base64 e BinHex. Se você tentar recuperar esses tipos de dados (por exemplo, chamando ReadElementContentAsBase64), o leitor gerará NotSupportedException.

A xml declaração não é exibida pelo leitor. Durante a leitura, você não encontrará um nó do tipo XmlDeclaration.

Confira também

Aplica-se a

CreateReader(ReaderOptions)

Cria um XmlReader com as opções especificadas pelo 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

Um objeto ReaderOptions que especifica se os namespaces duplicados devem ser omitidos.

Retornos

XmlReader

Um objeto XmlReader.

Aplica-se a