A pipe-friendly CLI for exploring and querying XML files. Built with Node.js/TypeScript.
Published on npm as @pvasek/xmlq.
npm install -g @pvasek/xmlqOr run directly with npx:
npx @pvasek/xmlq <command> [options] [file]All commands accept a file path or read from stdin when no file is given. Output goes to stdout, errors to stderr.
| Command | Description |
|---|---|
stat |
Quick overview of an XML file (size, root, element count, namespaces) |
tags |
List all unique element names with occurrence counts |
tree |
Show the structural skeleton of the document |
select |
Query nodes using XPath expressions |
first |
Select first N matching nodes (shorthand for select --first) |
count |
Count matches for an XPath expression |
text |
Extract text content of matched nodes |
attrs |
List attributes of matched elements |
fmt |
Pretty-print or reformat XML |
json |
Convert XML to JSON |
validate |
Check if the file is well-formed XML |
ns |
List namespaces used in the document |
schema |
Infer a rough schema from the document |
| Flag | Description |
|---|---|
--help, -h |
Show help |
--version, -V |
Show version |
--no-color |
Disable colored output |
--ns PREFIX=URI |
Register namespace prefix for XPath queries |
# Get a quick overview of an XML file
xmlq stat data.xml
# See the structure
xmlq tree data.xml
# Find all unique element names
xmlq tags data.xml
# Query with XPath
xmlq select '//product[price > 100]' data.xml
# Peek at the first record
xmlq first '//product' data.xml
# Count matches
xmlq count '//product' data.xml
# Extract text values
xmlq text '//product/name' data.xml
# Convert to JSON and pipe to jq
xmlq json data.xml | jq '.catalog.product[0]'
# Pretty-print
xmlq fmt --indent 4 data.xml
# Validate
xmlq validate data.xml
# Pipe from stdin
curl -s https://example.com/feed.xml | xmlq first 3 '//item'xmlq works with Claude Code — install the skill so Claude learns to use it automatically:
# 1. Install xmlq globally
npm install -g @pvasek/xmlq
# 2. In your project, install the skill
xmlq skill --installThis creates .claude/skills/xmlq/SKILL.md in your project. Claude Code discovers it and can then use xmlq to explore XML files on your behalf.
See SPEC.md for the full specification.
- Node.js >= 18
- npm
git clone https://github.com/pvasek/xmlq.git
cd xmlq
npm installnpm run build # compile TypeScript to dist/
npm run dev # watch mode — recompile on changesnode dist/index.js stat data.xml
# Or link globally for development
npm link
xmlq stat data.xmlsrc/
├── index.ts Entry point — CLI setup with commander
├── commands/
│ ├── stat.ts Quick file overview
│ ├── tags.ts List element names
│ ├── tree.ts Structural skeleton
│ ├── select.ts XPath query (core command)
│ ├── first.ts First N matches shorthand
│ ├── count.ts Count matches
│ ├── text.ts Extract text content
│ ├── attrs.ts List attributes
│ ├── fmt.ts Pretty-print / reformat
│ ├── json.ts XML to JSON conversion
│ ├── validate.ts Well-formedness check
│ ├── ns.ts List namespaces
│ └── schema.ts Infer schema
└── utils/
├── input.ts Read from file or stdin
└── output.ts TTY detection, output formatting
Each command file exports a register(program: Command): void function that adds its subcommand to the commander program.