XPath is Go package provides selecting nodes from XML, HTML or other documents using XPath expression.
htmlquery - an XPath query package for HTML document
xmlquery - an XPath query package for XML document.
jsonquery - an XPath query package for JSON document
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.
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()'.
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.- aUnary minusa + b: Additiona - b: Subtractiona * b: Multiplicationa div b: Divisiona mod b: Modulus (division remainder)
a or b: Booleanoroperation.a and b: Booleanandoperation.(expr): Parenthesized expressions.fun(arg1, ..., argn): Function calls:
| Function | Supported |
|---|---|
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() | ✗ |