1
0
mirror of https://gitlab.gnome.org/GNOME/libxml2.git synced 2026-01-26 21:41:34 +03:00
Files
libxml2/result/XPath/tests/chaptersbase
Nick Wellnhofer c2f4da1a93 Improve XPath predicate and filter evaluation
Consolidate code paths evaluating XPath predicates and filters.

Don't push context node on stack when evaluating predicates. I have no
idea why this was done. It seems completely useless and trying to pop
the context node from a corrupted stack has already caused security
issues.

Filter nodesets in-place and don't create node sets with NULL gaps which
allows to simplify merging a great deal. Simply move matched nodes
backward and create a compact node set.

Merge xmlXPathCompOpEvalPositionalPredicate into
xmlXPathCompOpEvalPredicate.
2019-04-22 14:48:46 +02:00

169 lines
3.3 KiB
Plaintext

========================
Expression: /child::EXAMPLE
Object is a Node Set :
Set contains 1 nodes:
1 ELEMENT EXAMPLE
ATTRIBUTE prop1
TEXT
content=gnome is great
ATTRIBUTE prop2
TEXT
content=& linux too
========================
Expression: /child::*
Object is a Node Set :
Set contains 1 nodes:
1 ELEMENT EXAMPLE
ATTRIBUTE prop1
TEXT
content=gnome is great
ATTRIBUTE prop2
TEXT
content=& linux too
========================
Expression: /child::EXAMPLE/child::head
Object is a Node Set :
Set contains 1 nodes:
1 ELEMENT head
========================
Expression: /child::EXAMPLE/child::*
Object is a Node Set :
Set contains 6 nodes:
1 ELEMENT head
2 ELEMENT chapter
ATTRIBUTE id
TEXT
content=chapter1
3 ELEMENT chapter
ATTRIBUTE id
TEXT
content=chapter2
4 ELEMENT chapter
ATTRIBUTE id
TEXT
content=chapter3
5 ELEMENT chapter
ATTRIBUTE id
TEXT
content=chapter4
6 ELEMENT chapter
ATTRIBUTE id
TEXT
content=chapter5
========================
Expression: /child::EXAMPLE/child::head/child::title
Object is a Node Set :
Set contains 1 nodes:
1 ELEMENT title
========================
Expression: /child::EXAMPLE/child::head/child::title/child::text()
Object is a Node Set :
Set contains 1 nodes:
1 TEXT
content=Welcome to Gnome
========================
Expression: /child::EXAMPLE/child::head/node()
Object is a Node Set :
Set contains 3 nodes:
1 TEXT
content=
2 ELEMENT title
3 TEXT
content=
========================
Expression: /descendant::title
Object is a Node Set :
Set contains 6 nodes:
1 ELEMENT title
2 ELEMENT title
3 ELEMENT title
4 ELEMENT title
5 ELEMENT title
6 ELEMENT title
========================
Expression: /descendant::p/ancestor::chapter
Object is a Node Set :
Set contains 5 nodes:
1 ELEMENT chapter
ATTRIBUTE id
TEXT
content=chapter1
2 ELEMENT chapter
ATTRIBUTE id
TEXT
content=chapter2
3 ELEMENT chapter
ATTRIBUTE id
TEXT
content=chapter3
4 ELEMENT chapter
ATTRIBUTE id
TEXT
content=chapter4
5 ELEMENT chapter
ATTRIBUTE id
TEXT
content=chapter5
========================
Expression: //p[1]
Object is a Node Set :
Set contains 5 nodes:
1 ELEMENT p
2 ELEMENT p
3 ELEMENT p
4 ELEMENT p
5 ELEMENT p
========================
Expression: //p[0 div 0]
Object is a Node Set :
Set contains 0 nodes:
========================
Expression: //p[100000000000000000000]
Object is a Node Set :
Set contains 0 nodes:
========================
Expression: //p[-100000000000000000000]
Object is a Node Set :
Set contains 0 nodes:
========================
Expression: //chapter[true()][position() mod 2 = 1][true()][2]
Object is a Node Set :
Set contains 1 nodes:
1 ELEMENT chapter
ATTRIBUTE id
TEXT
content=chapter3
========================
Expression: //chapter[true()][2][true()]
Object is a Node Set :
Set contains 1 nodes:
1 ELEMENT chapter
ATTRIBUTE id
TEXT
content=chapter2
========================
Expression: //node()[false()]
Object is a Node Set :
Set contains 0 nodes:
========================
Expression: (//node())[false()]
Object is a Node Set :
Set contains 0 nodes: