Как да създадете поток от XML фрагмент от XmlReader Microsoft Docs

Ако трябва да обработите голям XML файл, зареждането на пълно XML дърво в паметта може да не е осъществимо.Този раздел ви показва как да обработвате фрагменти в поток с помощта на XmlReader.

Един от най-ефективните начини за използване на XmlReader за четене на XElement обекти е да напишете свой собствен метод на ос. Методът на ос обикновено връща колекция, като например IEnumerable от XElements, както е показано в примера в този раздел. В метод на персонализирана ос, след създаване на XML фрагмент, извикайте метода ReadFrom и върнете колекцията, като използвате връщане на доходност. Това осигурява семантика на мързеливо изпълнение в метода на персонализираната ос.

Когато създавате XML дърво от XmlReader обект, на четеца на XmlReader трябва да бъде казано елементът да обработи.Методът ReadFrom не се връща, докато не прочете крайния таг на елемента.

Ако искате да създадете частично дърво, можете да създадете екземпляр на XmlReader, да посочите на четеца възела, който да бъде преобразуван в XElement дърво, и да създадете XElement обект.

Разделът Как да създадете поток от XML фрагмент с достъп до информация за заглавка съдържа информация за поточно предаване на по-сложен документ и пример за такава обработка.

Разделът Как да преобразувате поточно големи XML документи предоставя пример за използване на LINQ към XML за трансформиране на изключително големи XML документи, като същевременно поддържате ниска памет.

Следващият пример създава персонализиран метод на ос. Може да бъде заявен с помощта на LINQ заявка. Методът на персонализираната осStreamRootChildDoc е специално проектиран да чете документ с повтарящ се елементChild.

Забележка

Следващият пример използва C# yield return конструкция. Visual Basic предоставя еквивалентен код, който използва клас, който имплементира интерфейса IEnumerable(Of XElement). За пример как да имплементирате интерфейса IEnumerable(Of T) във Visual Basic, вижте Упътване. Внедряване на IEnumerable(Of T) във Visual Basic.

Този пример извежда следните данни.

В този пример изходният документ е доста малък. Въпреки това, дори и да съдържа милиониChild елементи, този пример ще изисква много малко памет.