mirror of
https://gitlab.gnome.org/GNOME/libxml2.git
synced 2026-01-26 21:41:34 +03:00
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.
169 lines
3.3 KiB
Plaintext
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:
|