168 lines
6.0 KiB
Markdown
168 lines
6.0 KiB
Markdown
# XPath
|
|
|
|
[![GoDoc](https://godoc.org/github.com/antchfx/xpath?status.svg)](https://godoc.org/github.com/antchfx/xpath)
|
|
[![Coverage Status](https://coveralls.io/repos/github/antchfx/xpath/badge.svg?branch=master)](https://coveralls.io/github/antchfx/xpath?branch=master)
|
|
[![Build Status](https://github.com/antchfx/xpath/actions/workflows/testing.yml/badge.svg)](https://github.com/antchfx/xpath/actions/workflows/testing.yml)
|
|
[![Go Report Card](https://goreportcard.com/badge/github.com/antchfx/xpath)](https://goreportcard.com/report/github.com/antchfx/xpath)
|
|
|
|
XPath is Go package provides selecting nodes from XML, HTML or other documents using XPath expression.
|
|
|
|
# Implementation
|
|
|
|
- [htmlquery](https://github.com/antchfx/htmlquery) - an XPath query package for HTML document
|
|
|
|
- [xmlquery](https://github.com/antchfx/xmlquery) - an XPath query package for XML document.
|
|
|
|
- [jsonquery](https://github.com/antchfx/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` : Boolean `or` operation.
|
|
|
|
- `a and b` : Boolean `and` 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()` | ✗ |
|
|
|
|
[^1]: XPath-2.0 expression
|