Skip to content

Filtering

Filters select top-level branches before models are materialized.

Use filters for simple stream-skippable decisions such as channel IDs and programme channel IDs. For arbitrary logic, read elements one at a time and apply your own code.

Include Channels

csharp
XmlTvReadFilter filter = XmlTvReadFilter
    .Create()
    .IncludeChannels(channels => channels.WithIds("channel-one", "channel-two"))
    .Build();

using var reader = new XmlTvReader("guide.xml", filter: filter);

Include Programmes

csharp
XmlTvReadFilter filter = XmlTvReadFilter
    .Create()
    .IncludeProgrammes(programmes => programmes.ForChannels("channel-one"))
    .Build();

using var reader = new XmlTvReader("guide.xml", filter: filter);

Metadata Only

Building a filter without included branches reads root metadata only:

csharp
XmlTvReadFilter filter = XmlTvReadFilter.Create().Build();

XmlTvDocument document = await XmlTvReader.ReadAsync("guide.xml", filter: filter);

Date Expressions

XmlTvSharp does not provide programme time range filtering. Date/time values can have partial precision and named timezone tokens, so a general time comparison API would either be expensive or misleading.

Use forward-only reading when you need custom programme filtering:

csharp
using var reader = new XmlTvReader("guide.xml");

while (await reader.ReadElementAsync() is { } element)
{
    if (element is not XmlTvProgramme programme)
    {
        continue;
    }

    // Apply application-specific filtering here.
}

Released under the MIT License.