XPath
XPath is Go package provides selecting nodes from XML, HTML or other documents using XPath expression.
Implementation
- htmlquery - an XPath query package for HTML document
- xmlquery - an XPath query package for XML document.
- jsonquery - an XPath query package for JSON document
Supported Features
The basic XPath patterns.
The basic XPath patterns cover 90% of the cases that most stylesheets will need.
node: Selects all child elements with nodeName of node.
*: Selects all child elements.
@attr: Selects the attribute attr.
@*: Selects all attributes.
node(): Matches an org.w3c.dom.Node.
text(): Matches a org.w3c.dom.Text node.
comment(): Matches a comment.
.: Selects the current node.
..: Selects the parent of current node.
/: Selects the document node.
a[expr]: Select only those nodes matching a which also satisfy the expression expr.
a[n]: Selects the nth matching node matching a When a filter's expression is a number, XPath selects based on position.
a/b: For each node matching a, add the nodes matching b to the result.
a//b: For each node matching a, add the descendant nodes matching b to the result.
//b: Returns elements in the entire document matching b.
a|b: All nodes matching a or b, union operation(not boolean or).
(a, b, c): Evaluates each of its operands and concatenates the resulting sequences, in order, into a single result sequence
(a/b): Selects all matches nodes as grouping set.
Node Axes
child::*: The child axis selects children of the current node.
child::node(): Selects all the children of the context node.
- child::text(): Selects all text node children of the context node.
descendant::*: The descendant axis selects descendants of the current node. It is equivalent to '//'.
descendant-or-self::*: Selects descendants including the current node.
attribute::: Selects attributes of the current element. It is equivalent to @\
following-sibling::*: Selects nodes after the current node.
preceding-sibling::*: Selects nodes before the current node.
following::*: Selects the first matching node following in document order, excluding descendants.
preceding::*: Selects the first matching node preceding in document order, excluding ancestors.
parent::*: Selects the parent if it matches. The '..' pattern from the core is equivalent to 'parent::node()'.
ancestor::*: Selects matching ancestors.
ancestor-or-self::*: Selects ancestors including the current node.
self::*: Selects the current node. '.' is equivalent to 'self::node()'.
Expressions
The gxpath supported three types: number, boolean, string.
path: Selects nodes based on the path.
a = b: Standard comparisons.
a = b : True if a equals b.
- a != b : True if a is not equal to b.
- a < b : True if a is less than b.
- a <= b : True if a is less than or equal to b.
- a > b : True if a is greater than b.
- a >= b : True if a is greater than or equal to b.
a + b: Arithmetic expressions.
- a Unary minus
- a + b : Addition
- a - b : Subtraction
- a * b : Multiplication
- a div b : Division
- a mod b : Modulus (division remainder)
a or b: Booleanoroperation.
a and b: Booleanandoperation.
(expr): Parenthesized expressions.
fun(arg1, ..., argn): Function calls:
boolean() | ✓ |
| ceiling() | ✓ |
| choose() | ✗ |
| concat() | ✓ |
| contains() | ✓ |
| count() | ✓ |
| current() | ✗ |
| document() | ✗ |
| element-available() | ✗ |
| ends-with() | ✓ |
| false() | ✓ |
| floor() | ✓ |
| format-number() | ✗ |
| function-available() | ✗ |
| generate-id() | ✗ |
| id() | ✗ |
| key() | ✗ |
| lang() | ✗ |
| last() | ✓ |
| local-name() | ✓ |
| lower-case()[^1] | ✓ |
| matches() | ✓ |
| name() | ✓ |
| namespace-uri() | ✓ |
| normalize-space() | ✓ |
| not() | ✓ |
| number() | ✓ |
| position() | ✓ |
| replace() | ✓ |
| reverse() | ✓ |
| round() | ✓ |
| starts-with() | ✓ |
| string() | ✓ |
| string-join()[^1] | ✓ |
| string-length() | ✓ |
| substring() | ✓ |
| substring-after() | ✓ |
| substring-before() | ✓ |
| sum() | ✓ |
| system-property() | ✗ |
| translate() | ✓ |
| true() | ✓ |
| unparsed-entity-url() | ✗ |
[^1]: XPath-2.0 expression