Regarding the namespace support ... I think the easiest solution is to allow the module users to use namespace prefixes when specifying the rules, but at the same time let (or even force) them to specify what prefix belongs to what namespace. So that if the XML producer decides to use a different prefix for the same namespace the module will convert it behind the scenes.
$parser = XML::Rules->new(
rules => [
'SOAP-ENV:Envelope' => ...,
'job:Location' => ...
...
],
namespaces => {
'http://schemas.xmlsoap.org/soap/envelope/' => 'SOAP-ENV',
'http://www.foo.com/schemas/job.xsd' => 'job',
...
},
);
And then no matter what prefix there is in the parsed XML, the rules starting with 'job:' will be used for tags in namespace 'http://www.foo.com/schemas/job.xsd'. Does this make sense?