diff --git a/lib/feed_reader/formats/rss.ex b/lib/feed_reader/formats/rss.ex index 71ff457..9c9a3bf 100644 --- a/lib/feed_reader/formats/rss.ex +++ b/lib/feed_reader/formats/rss.ex @@ -24,6 +24,7 @@ defmodule FeedReader.Formats.RSS do limits: XMLResourceLimits.new(opts), frames: [], channel: nil, + root_closed: false, error: nil } end diff --git a/lib/feed_reader/formats/rss/handler.ex b/lib/feed_reader/formats/rss/handler.ex index 2cbdfb7..7c8b4a9 100644 --- a/lib/feed_reader/formats/rss/handler.ex +++ b/lib/feed_reader/formats/rss/handler.ex @@ -94,6 +94,9 @@ defmodule FeedReader.Formats.RSS.Handler do defp close_element("channel", _channel, state), do: {:ok, state} + defp close_element("rss", _feed, %{frames: []} = state), + do: {:halt, %{state | root_closed: true}} + defp close_element(name, value, %{frames: [parent | rest]} = state) do children = Map.update(parent.children, name, value, &(List.wrap(&1) ++ [value])) {:ok, %{state | frames: [%{parent | children: children} | rest]}}