- Notifications
You must be signed in to change notification settings - Fork0
XPath implemenation in Pure Crystal
License
naqvis/crystal-xpath2
Folders and files
Name | Name | Last commit message | Last commit date | |
---|---|---|---|---|
Repository files navigation
Crystal XPath2 Shard provide XPath implementation inPure Crystal. Performs the compilation of XPath expression and provides mechanism to select/evaluate nodes from HTML or other documents using XPath expression
The basic XPath patterns cover 90% of the cases that most stylesheets will need.
node
: Selects all child elements with node Name 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
child::*
: The child axis selects children of the current 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()"
.
Shard supports three types: number, boolean, string.
path
: Selects nodes based on the path.a = b
: Standard comparisons.- a
=
btrue
if a equals b. - a
!=
btrue
if a is not equal to b. - a
<
btrue
if a is less than b. - a
<=
btrue
if a is less than or equal to b. - a
>
btrue
if a is greater than b. - a
>=
btrue
if a is greater than or equal to b.
- a
a + b
: Arithmetic expressions.- a
Unary minus- a
+
bAdd - a
-
bSubstract - a
*
bMultiply - a
div
bDivide - a
mod
bFloating point mod, like Java.
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() | ✓ |
name() | ✓ |
namespace-uri() | ✓ |
normalize-space() | ✓ |
not() | ✓ |
number() | ✓ |
position() | ✓ |
replace() | ✓ |
reverse() | ✓ |
round() | ✓ |
starts-with() | ✓ |
string() | ✓ |
string-length() | ✓ |
substring() | ✓ |
substring-after() | ✓ |
substring-before() | ✓ |
sum() | ✓ |
system-property() | ✗ |
translate() | ✓ |
true() | ✓ |
unparsed-entity-url() | ✗ |
Add the dependency to your
shard.yml
:dependencies:xpath2:github:naqvis/crystal-xpath2
Run
shards install
refer tospec
for usage examples or refer toCrystal HTML5 andJSON XPath for implementation details.
To run all tests:
crystal spec
- Fork it (https://github.com/naqvis/crystal-xpath2/fork)
- Create your feature branch (
git checkout -b my-new-feature
) - Commit your changes (
git commit -am 'Add some feature'
) - Push to the branch (
git push origin my-new-feature
) - Create a new Pull Request
- Ali Naqvi - creator and maintainer
About
XPath implemenation in Pure Crystal