Re: [xslt] [PATCH] Bug: xsltCompilePattern : failed to compile '@node()'



On Sat, Jul 11, 2009 at 07:40:05PM +0200, Nick Wellnhofer wrote:
> 
> I have always used match="@*" which works as expected.
> 
> But, being curious, I had a deeper look at xsltCompileStepPattern. The problem is that "@node()", "attribute::node()", "child::node()" and "node()" are all handled in different code paths and only the latter works.
> 
> Then, I noticed that the handling of match="child::name" is wrong. It matches the parents of <name> elements although it should be treated exactly like match="name". So the whole XSLT_OP_CHILD stuff is unneeded.
> 
> I also found that xsltScanName behaves a bit strange with regard to ':' characters. It doesn't parse an XML Name like the documentation says. It's better to use xsltScanNCName instead.
> 
> Another minor issue is that the parser currently allows invalid expressions like match="element*" because of lines 1745-1747 in pattern.c in trunk.
> 
> Attached is a patch against trunk that fixes all these issues. It merges the parsing of NodeTests in StepPatterns into a single code path keeping track of the axis that has been specified previously. The patch also contains some test cases.

  Good analysis and excellent patch ! This does clean things up a lot !
Aplied and pushed to git head. The only change I had to make was to add
the new regression tests in tests/REC/Makefile.am :-)

   Thanks a lot !

Daniel

-- 
Daniel Veillard      | libxml Gnome XML XSLT toolkit  http://xmlsoft.org/
daniel veillard com  | Rpmfind RPM search engine http://rpmfind.net/
http://veillard.com/ | virtualization library  http://libvirt.org/


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]