The Python 3 script xgrep.py searches XML files for patterns specified in terms of XPath expressions.
minor edit in README.md
Added tag 2.4 for changeset 63c246abe9f0
add option "-r" ("--regex")

heads

default
browse log
2.4
browse .tar.gz

clone

read-only
https://hg.sr.ht/~nolda/xgrep
read/write
ssh://hg@hg.sr.ht/~nolda/xgrep

XGrep

xgrep.py is a Python 3 script for searching for elements in XML files, using XPath 1.0 expressions.

The script is released 'as is' with no warranty under the GNU General Public License, version 2.0.

It requires the following Python 3 packages:

The lxml package internally calls the libxml2 and libxslt C libraries.

On Debian-based systems, the prerequisites can be installed as follows:

sudo apt-get install python3-blessings python3-lxml

Usage:

xgrep.py [-c] [--count]
         [-i] [--indent]
         [-l] [--files-with-matches]
         [-L] [--files-without-match]
         [-m] [--matches]
         [-n] [--declare-ns]
         [-q] [--quiet]
         [-r <ns>] [--regex <ns>]
         <XPath expression>
         <XML file(s)>

xgrep.py [-v] [--version]

xgrep.py [-h] [--help]

Normally, xgrep.py outputs the matching parts of the XML files together with their filenames and the XPath expression. If -r <ns> is set, the EXSLT function <ns>:test() can be used in the XPath expression for matching regular expressions. The option -m outputs only the matching parts, without filenames or XPath expressions. The option -i indents the matching parts, and the option -n includes namespace declarations. The options -c, -l, -L, and -q mimic the behaviour of GNU grep. The latter option suppresses any output, but still returns the exit status (0 if there are matches, 1 if there are none, and 2 for errors).

Andreas Nolda (andreas@nolda.org)