XNode.CreateReader Método

Definição

Cria um XmlReader para este nó.

Sobrecargas

Name Description
CreateReader()

Cria um XmlReader para este nó.

CreateReader(ReaderOptions)

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

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

Devoluções

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

Exemplos

O exemplo seguinte cria uma árvore XML, cria um XmlReader usando o CreateReader método, e cria um 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)

Este exemplo produz a seguinte saída:

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

Outra utilização deste método é fazer uma transformação XSLT. Podes criar uma árvore XML, criar um XmlReader a partir da árvore XML, criar um novo documento e criar um XmlWriter que escreva no novo documento. Depois, podes invocar a transformação XSLT, passando o XmlReader e XmlWriter para a transformação. Após a conclusão bem-sucedida da transformação, a nova árvore XML é preenchida 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)

Este exemplo produz a seguinte saída:

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

Observações

Normalmente utiliza-se este método quando tem de fornecer outro componente com um XmlReader. Por exemplo, pode criar uma XmlReader árvore de LINQ para XML, e depois passar esse leitor para Load.

Todos os leitores que regressam Create são leitores de normalização. Eles realizam sempre a normalização de quebra de linha e a normalização total dos atributos. Em contraste, o XmlReader retornado por CreateReader não é um leitor normalizador. Não transforma nenhum espaço em branco. Também devolve os atributos pela ordem em que foram adicionados, não pela ordem dos nomes dos atributos.

O LINQ para XML não mantém informação sobre se os atributos são atributos predefinidos. IsDefault irá sempre devolver falso, independentemente de o atributo ter sido preenchido a partir de um valor padrão ou não.

Os PUBLIC atributos e SYSTEM pseudo em XDocumentType não estão disponíveis através do XmlReader.MoveToAttribute método. Só estão disponíveis através do XmlReader.GetAttribute método que utiliza o nome qualificado do atributo como parâmetro. Se tiveres de recuperar os PUBLIC atributos ou, SYSTEM deves usar o XmlReader.GetAttribute método.

Os dados Base64 e BinHex não são suportados. Se tentar recuperar este tipo de dados (por exemplo, chamando ReadElementContentAsBase64), o leitor lançará NotSupportedException.

A xml declaração não é apresentada pelo leitor. Ao ler, não encontrará um nó do tipo XmlDeclaration.

Ver também

Aplica-se a

CreateReader(ReaderOptions)

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

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 ReaderOptions objeto que especifica se deve omitir espaços de nomes duplicados.

Devoluções

Um XmlReader objeto.

Aplica-se a