To make it simpler in some cases to write matchers, there is a matcher class called fun-matcher which only requires a function which it calls on a node and which returns a boolean.
Slots:
fun, initarg :fun--a function designator for the matcher function, which is called on an xmls node and returns a boolean to indicate whether or not the node is matched.
how-many, initarg :how-many--a symbol indicating how many times the matcher can match children of its parent tag. One of:
name, initarg :name--a string or other data type specifying the name of the matcher, used in error reporting and debugging.
Example:
(make-instance 'fun-matcher :fun #'(lambda (node) (string= node "foo")) :how-many :one-or-more :name "foo-string")