diff --git a/README.md b/README.md index 97e18c3..e90352b 100644 --- a/README.md +++ b/README.md @@ -207,6 +207,19 @@ $ printf 'name,age\nAlice,30\nBob,25' | sql-pipe -O xml 'SELECT * FROM t' $ cat data.xml | sql-pipe -I xml 'SELECT name FROM t WHERE age > 25' ``` +Real-world XML documents (RSS feeds, API responses) nest rows inside a container element. Use `--xml-root` to navigate to the row container and `--xml-row` to filter by element tag: + +```sh +# Query an RSS feed: channel/item → rows +$ curl -s https://feeds.feedburner.com/TheHackersNews \ + | sql-pipe -I xml --xml-root channel --xml-row item \ + 'SELECT title FROM t LIMIT 5' + +# Query XML with a custom root and row name +$ cat events.xml | sql-pipe -I xml --xml-root events --xml-row event \ + 'SELECT name, date FROM t WHERE type = "conference"' +``` + Chain queries by piping back in — useful for two-pass aggregations. Pass `-H` to the first call so the second one sees column names: ```sh diff --git a/docs/sql-pipe.1.scd b/docs/sql-pipe.1.scd index 07197cb..cca37bf 100644 --- a/docs/sql-pipe.1.scd +++ b/docs/sql-pipe.1.scd @@ -183,6 +183,16 @@ EXAMPLES $ cat data.xml | sql-pipe -I xml 'SELECT name FROM t WHERE age > 25' + Query XML input with nested structure using --xml-root and --xml-row (e.g. RSS feeds): + + $ curl -s https://feeds.example.com/news.rss \ + | sql-pipe -I xml --xml-root channel --xml-row item 'SELECT title FROM t LIMIT 5' + + Output results as XML with custom element names: + + $ cat data.csv \ + | sql-pipe -O xml --xml-root feed --xml-row entry 'SELECT * FROM t' + Preview schema and first 3 rows of a CSV file: $ cat sales.csv | sql-pipe --sample 3 diff --git a/src/args.zig b/src/args.zig index e504799..4accccf 100644 --- a/src/args.zig +++ b/src/args.zig @@ -193,6 +193,7 @@ pub fn printUsage(writer: *std.Io.Writer) !void { \\ cat data.csv | sql-pipe --output-format json 'SELECT * FROM t' \\ cat data.json | sql-pipe --input-format json 'SELECT * FROM t' \\ cat data.ndjson | sql-pipe -I ndjson -O ndjson 'SELECT name FROM t WHERE age > 18' + \\ cat data.xml | sql-pipe -I xml --xml-root channel --xml-row item "SELECT title FROM t" \\ cat data.csv | sql-pipe --sample 5 \\ );