# 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