XNode.ReadFrom(XmlReader) XNode.ReadFrom(XmlReader) XNode.ReadFrom(XmlReader) XNode.ReadFrom(XmlReader) Method

Definizione

Crea un oggetto XNode da un oggetto XmlReader.Creates an XNode from an XmlReader.

public:
 static System::Xml::Linq::XNode ^ ReadFrom(System::Xml::XmlReader ^ reader);
public static System.Xml.Linq.XNode ReadFrom (System.Xml.XmlReader reader);
static member ReadFrom : System.Xml.XmlReader -> System.Xml.Linq.XNode
Public Shared Function ReadFrom (reader As XmlReader) As XNode

Parametri

reader
XmlReader XmlReader XmlReader XmlReader

Un XmlReader posizionato al livello del nodo per leggere nel XNode.An XmlReader positioned at the node to read into this XNode.

Restituisce

XNode che contiene il nodo e i nodi discendenti relativi letti dal lettore.An XNode that contains the node and its descendant nodes that were read from the reader. Il tipo di runtime del nodo è determinato dal tipo di nodo (NodeType) del primo nodo incontrato nel lettore.The runtime type of the node is determined by the node type (NodeType) of the first node encountered in the reader.

Eccezioni

XmlReader non è posizionato su un tipo di nodo riconosciuto.The XmlReader is not positioned on a recognized node type.

Il XmlReader sottostante genera un'eccezione.The underlying XmlReader throws an exception.

Esempi

Questo esempio Usa il file XML seguente, denominato Source:This example uses the following XML file, named Source.xml:

<?xml version="1.0" encoding="utf-8" ?>
<Root>
  <Child Key="01">
    <GrandChild>aaa</GrandChild>
  </Child>
  <Child Key="02">
    <GrandChild>bbb</GrandChild>
  </Child>
  <Child Key="03">
    <GrandChild>ccc</GrandChild>
  </Child>
</Root>

L'esempio seguente crea un metodo dell'asse personalizzato che usa ReadFrom e quindi esegue una query dell'asse personalizzato utilizzando una query LINQ:The following example creates a custom axis method that uses ReadFrom and then queries the custom axis by using a LINQ query:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Xml;
using System.Xml.Linq;

class Program
{
    static IEnumerable<XElement> StreamRootChildDoc(string uri)
    {
        using (XmlReader reader = XmlReader.Create(uri))
        {
            reader.MoveToContent();
            
            // Parse the file and return each of the nodes.
            while (!reader.EOF)
            {
                if (reader.NodeType == XmlNodeType.Element && reader.Name == "Child")
                {
                    XElement el = XElement.ReadFrom(reader) as XElement;
                    if (el != null)
                        yield return el;
                }
                else
                    reader.Read();
            }
        }
    }

    static void Main(string[] args)
    {
        IEnumerable<string> grandChildData =
            from el in StreamRootChildDoc("Source.xml")
            where (int)el.Attribute("Key") > 1
            select (string)el.Element("GrandChild");

        foreach (string str in grandChildData)
            Console.WriteLine(str);
    }
}
Imports System
Imports System.Collections.Generic
Imports System.Linq
Imports System.Xml
Imports System.Xml.Linq

Module Program
    Iterator Function StreamRootChildDoc(ByVal uri As String) As IEnumerable(Of XElement)

        Using reader As XmlReader = XmlReader.Create(uri)
            reader.MoveToContent()

            ' Parse the file and return each of the nodes.
            While Not reader.EOF

                If reader.NodeType = XmlNodeType.Element AndAlso reader.Name = "Child" Then
                    Dim el As XElement = TryCast(XElement.ReadFrom(reader), XElement)
                    If el IsNot Nothing Then Yield el
                Else
                    reader.Read()
                End If
            End While
        End Using
    End Function

    Sub Main(args As String())

        Dim grandChildData As IEnumerable(Of String) =
            From el In StreamRootChildDoc("Source.xml")
            Where CInt(el.Attribute("Key")) > 1
            Select CStr(el.Element("GrandChild"))

        For Each str As String In grandChildData
            Console.WriteLine(str)
        Next

    End Sub

End Module

Questo esempio produce il seguente output:This example produces the following output:

bbb  
ccc  

Commenti

È possibile utilizzare questo metodo per scrivere un metodo che restituisce una raccolta di nodi, producendo ogni nodo, mentre il nodo viene letto dal lettore.You can use this method to write a method that returns a collection of nodes, yielding each node as the node is read from the reader. Questo metodo consente di elaborare file XML arbitrariamente grandi dimensioni con un footprint di memoria di dimensioni molto ridotte.This method enables you to process arbitrarily large XML files with a very small memory footprint.

Il lettore passato a questo metodo potrebbe generare eccezioni.The reader that you pass to this method might throw exceptions. ReadFrom non intercettare tutte le eccezioni generate dal Visualizzatore; le eccezioni non gestite vengono propagate al codice che ha chiamato ReadFrom.ReadFrom does not catch all exceptions thrown by the reader; the unhandled exceptions bubble up to the code that called ReadFrom. In particolare, il codice deve essere preparato a gestire XmlException.In particular, your code should be prepared to handle XmlException.

Per un esempio di come eseguire il flusso di un documento più complesso, vedere come: Stream frammenti XML con accesso a informazioni di intestazione.For an example of how to stream a more complex document, see How to: Stream XML Fragments with Access to Header Information.

Determinati operatori di query standard, ad esempio OrderBy, scorrono l'origine, raccolgono tutti i dati, li ordinano e infine restituiscono il primo elemento nella sequenza.Certain standard query operators, such as OrderBy, iterate their source, collect all of the data, sort it, and then finally yield the first item in the sequence. Se si usa un operatore di query che materializza l'origine prima di restituire il primo elemento, non verrà mantenuto un footprint di memoria ridotto.If you use a query operator that materializes its source before yielding the first item, you will not retain a small memory footprint.

Per un esempio d'uso LINQ to XMLLINQ to XML per trasformare documenti XML di dimensioni estremamente grandi mantenendo un footprint di memoria di piccole dimensioni, vedere come: Eseguire la trasformazione del flusso di documenti XML di grandi dimensioni.For an example of using LINQ to XMLLINQ to XML to transform extremely large XML documents while maintaining a small memory footprint, see How to: Perform Streaming Transform of Large XML Documents.

Si applica a

Vedi anche