Awesome
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 minusa + b
: Additiona - b
: Subtractiona * b
: Multiplicationa div b
: Divisiona mod b
: Modulus (division remainder)
-
a or b
: Booleanor
operation. -
a and b
: Booleanand
operation. -
(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() | ✗ |