v0.10.0 — real XML mode (RSS/Atom, sitemaps)
Real XML mode — RSS/Atom feeds, sitemaps, SVG, OPML now parse correctly.
HTML parsers silently mangle XML: <link> is a void element in HTML, so every RSS item's URL is lost (try pup 'item link' or htmlq 'item link' on any feed — nothing comes back); pubDate gets lowercased; namespaces are mishandled. cull now detects XML (an <?xml…?> declaration or a known root: <rss>, <feed>, <urlset>, <sitemapindex>, <opml>, <svg>) and parses it with a real XML parser. Every feature just works on it: CSS selection, -j templates, -t, -p, --json-nodes, -i, multiple inputs.
A feed reader is now one line:
$ cull item -j '{title: title, url: link, date: pubDate}' https://lobste.rs/rss
{"title":"A shell colon does nothing. Use it anyway","url":"https://refp.se/…","date":"Sat, 25 Jul 2026 06:33:00 -0500"}Details:
--xmlforces XML parsing (malformed XML → hard error, exit 2);--htmlforces HTML; auto-detection is per input, and auto-detected-but-malformed input warns and falls back to the forgiving HTML parser- In XML mode selectors are case-sensitive, as XML requires:
pubDatematches<pubDate>only - Namespaced tags keep their prefix — select with an escaped colon:
cull item -j '{thumb: media\:thumbnail @url}' https://feeds.bbci.co.uk/news/rss.xml -tputs each XML field on its own line; serialization keeps<link>children intact- Charset sniffing now honors
<?xml version="1.0" encoding="…"?>(after BOM andContent-Type, before<meta charset>) - Sitemaps:
cull 'url > loc' -t https://blog.rust-lang.org/sitemap.xml(andsitemap > locfor sitemap indexes)
162 tests. See the cookbook §11 for live-verified recipes, and the CHANGELOG.