package main
import (
"fmt"
"github.com/antchfx/xpath"
)
func main() {
expr, err := xpath.Compile("count(//book)")
if err != nil {
panic(err)
}
var root xpath.NodeNavigator
// using Evaluate() method
val := expr.Evaluate(root) // it returns float64 type
fmt.Println(val.(float64))
// using Evaluate() method
expr = xpath.MustCompile("//book")
val = expr.Evaluate(root) // it returns NodeIterator type.
iter := val.(*xpath.NodeIterator)
for iter.MoveNext() {
fmt.Println(iter.Current().Value())
}
// using Select() method
iter = expr.Select(root) // it always returns NodeIterator object.
for iter.MoveNext() {
fmt.Println(iter.Current().Value())
}
}
type NodeNavigator interface {
// NodeType returns the XPathNodeType of the current node. NodeType() NodeType// LocalName gets the Name of the current node. LocalName() string// Prefix returns namespace prefix associated with the current node. Prefix() string// Value gets the value of current node. Value() string// Copy does a deep copy of the NodeNavigator and all its components. Copy() NodeNavigator// MoveToRoot moves the NodeNavigator to the root node of the current node. MoveToRoot()
// MoveToParent moves the NodeNavigator to the parent node of the current node. MoveToParent() bool// MoveToNextAttribute moves the NodeNavigator to the next attribute on current node. MoveToNextAttribute() bool// MoveToChild moves the NodeNavigator to the first child node of the current node. MoveToChild() bool// MoveToFirst moves the NodeNavigator to the first sibling node of the current node. MoveToFirst() bool// MoveToNext moves the NodeNavigator to the next sibling node of the current node. MoveToNext() bool// MoveToPrevious moves the NodeNavigator to the previous sibling node of the current node. MoveToPrevious() bool// MoveTo moves the NodeNavigator to the same position as the specified NodeNavigator. MoveTo(NodeNavigator) bool
}
NodeNavigator provides cursor model for navigating XML data.
const (
// RootNode is a root node of the XML document or node tree. RootNode NodeType = iota// ElementNode is an element, such as <element>. ElementNode
// AttributeNode is an attribute, such as id='123'. AttributeNode
// TextNode is the text content of a node. TextNode
// CommentNode is a comment node, such as <!-- my comment --> CommentNode
)