Aracılığıyla paylaş


XNode.ReadFrom(XmlReader) Yöntem

Tanım

bir içinden bir XNode XmlReaderoluşturur.

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

Parametreler

reader
XmlReader

XmlReader Bu XNodeiçine okumak için düğümde konumlandırılmış bir .

Döndürülenler

XNode

Okuyucudan XNode okunan düğümü ve alt düğümlerini içeren. Düğümün çalışma zamanı türü, okuyucuda karşılaşılan ilk düğümün düğüm türüne (NodeType) göre belirlenir.

Özel durumlar

XmlReader, tanınan bir düğüm türüne konumlandırılmaz.

Temel alınan XmlReader bir özel durum oluşturur.

Örnekler

Bu örnek, Source.xml adlı aşağıdaki XML dosyasını kullanır:

<?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>

Aşağıdaki örnek, LINQ sorgusu kullanarak özel ekseni kullanan ReadFrom ve sorgulayan bir özel eksen yöntemi oluşturur:

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.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

Bu örnek aşağıdaki çıkışı oluşturur:

bbb  
ccc  

Açıklamalar

Bu yöntemi kullanarak bir düğüm koleksiyonu döndüren ve düğüm okuyucudan okundukça her düğümü veren bir yöntem yazabilirsiniz. Bu yöntem, çok küçük bir bellek ayak izi ile rastgele büyük XML dosyalarını işlemenizi sağlar.

Bu yönteme geçirdiğiniz okuyucu özel durumlar atabilir. ReadFrom okuyucu tarafından atılan tüm özel durumları yakalamaz; işlenmeyen özel durumlar adlı ReadFromkoda kadar kabarır. Özellikle, kodunuz işlemeye XmlExceptionhazır olmalıdır.

Daha karmaşık bir belgenin akışının nasıl yapılacağını gösteren bir örnek için bkz. Üst bilgi bilgilerine erişimle XML parçalarının akışını yapma.

gibi OrderBybazı standart sorgu işleçleri, kaynaklarını yineler, tüm verileri toplar, sıralar ve son olarak dizideki ilk öğeyi verir. İlk öğeyi sağlamadan önce kaynağını oluşturan bir sorgu işleci kullanırsanız, küçük bir bellek ayak izi tutmazsınız.

Bellekte küçük bir ayak izi tutarken son derece büyük XML belgelerini dönüştürmek için LINQ to XML kullanma örneği için bkz. Büyük XML belgelerinin akış dönüşümünü gerçekleştirme.

Şunlara uygulanır

Ayrıca bkz.