Table of Contents

XmlReaderExtensions Class

Definition

Namespace
Cuemon.Extensions.Xml
Assemblies
Cuemon.Extensions.Xml.dll
Source
src/Cuemon.Extensions.Xml/XmlReaderExtensions.cs

Extension methods for the XmlReader class.

public static class XmlReaderExtensions
Inheritance
XmlReaderExtensions

Examples

XmlReaderExtensions provides extension methods for XmlReader including navigation, hierarchy building, chunked reading, and stream conversion. This example starts with an XML string containing <root> and two <item> elements, then demonstrates MoveToFirstElement to position at the first element, ToHierarchy to build a tree of element nodes with child names, Chunk(1) to stream only the first element as a new indented XmlReader, and ToStream to convert the entire reader content into a readable stream. Console output shows the root element name ("root"), a hierarchy description with child names, the outer XML of the first chunk (<item id="1">First</item>), and the full XML content.

using System;
using System.IO;
using System.Linq;
using System.Xml;
using Cuemon.Extensions.Xml;

namespace DocExamples;

public static class XmlReaderExtensionsExample
{
    private const string XmlDocument = "<?xml version=\"1.0\" encoding=\"utf-8\"?><root><item id=\"1\">First</item><item id=\"2\">Second</item></root>";

    public static void Demonstrate()
    {
        Console.WriteLine(GetRootName());
        Console.WriteLine(DescribeHierarchy());
        Console.WriteLine(ReadFirstChunk());
        Console.WriteLine(CopyXml());
    }

    private static string GetRootName()
    {
        using var xmlReader = XmlReader.Create(new StringReader(XmlDocument));
        return xmlReader.MoveToFirstElement() ? xmlReader.LocalName : string.Empty;
    }

    private static string DescribeHierarchy()
    {
        using var xmlReader = XmlReader.Create(new StringReader(XmlDocument));
        var hierarchy = xmlReader.ToHierarchy();
        var childNames = string.Join(", ", hierarchy.GetChildren().Select(child => child.Instance.Name));
        return $"{hierarchy.Instance.Name}: {childNames}";
    }

    private static string ReadFirstChunk()
    {
        using var xmlReader = XmlReader.Create(new StringReader(XmlDocument));
        using var firstChunk = xmlReader.Chunk(1, settings => settings.Indent = true).First();

        firstChunk.MoveToFirstElement();
        return firstChunk.ReadOuterXml();
    }

    private static string CopyXml()
    {
        using var xmlReader = XmlReader.Create(new StringReader(XmlDocument));
        using var xmlStream = xmlReader.ToStream();
        using var streamReader = new StreamReader(xmlStream);

        return streamReader.ReadToEnd();
    }
}

Methods

Name Description
Chunk(XmlReader, int, Action<XmlWriterSettings>)

Creates and returns a sequence of chunked XmlReader instances with a maximum of the specified size of XML node elements located on a depth of 1.

MoveToFirstElement(XmlReader)

Moves the reader to the first element.

ToHierarchy(XmlReader)

Converts the XML hierarchy of the reader into an IHierarchy<T>.

ToStream(XmlReader, Action<XmlCopyOptions>)

Copies everything from the specified reader and returns the result as an XML stream.

ToStream(XmlReader, Action<XmlWriter, XmlReader, DisposableOptions>, Action<XmlCopyOptions>)

Copies the specified reader using the specified delegate copier and returns the result as an XML stream.