Documentation ¶
Overview ¶
Package xpath implements a strict subset of the XPath specification for the Go language.
The XPath specification is available at:
http://www.w3.org/TR/xpath
Path expressions supported by this package are in the following format, with all components being optional:
/axis-Name::node-test[predicate]/axis-Name::node-test[predicate]
At the moment, xpath is compatible with the XPath specification to the following extent:
- All axes are supported ("child", "following-sibling", etc)
- All abbreviated forms are supported (".", "//", etc)
- All node types except for namespace are supported
- Predicates may be [N], path, [not(path)], [path=literal] or [contains(path, literal)]
- Predicates may be joined with "or", "and", and parenthesis
- Richer expressions and namespaces are not supported
For example, assuming the following document:
<library> <!-- Great book. --> <book id="b0836217462" available="true"> <isbn>0836217462</isbn> <title lang="en">Being a Dog Is a Full-Time Job</title> <quote>I'd dog paddle the deepest ocean.</quote> <author id="CMS"> <?echo "go rocks"?> <Name>Charles M Schulz</Name> <born>1922-11-26</born> <dead>2000-02-12</dead> </author> <character id="PP"> <Name>Peppermint Patty</Name> <born>1966-08-22</born> <qualification>bold, brash and tomboyish</qualification> </character> <character id="Snoopy"> <Name>Snoopy</Name> <born>1950-10-04</born> <qualification>extroverted beagle</qualification> </character> </book> </library>
The following examples are valid path expressions, and the first match has the indicated value:
/library/book/isbn => "0836217462" library/*/isbn => "0836217462" /library/book/../book/./isbn => "0836217462" /library/book/character[2]/name => "Snoopy" /library/book/character[born='1950-10-04']/name => "Snoopy" /library/book//node()[@id='PP']/name => "Peppermint Patty" //book[author/@id='CMS']/title => "Being a Dog Is a Full-Time Job", /library/book/preceding::comment() => " Great book. " //*[contains(born,'1922')]/name => "Charles M Schulz" //*[@id='PP' or @id='Snoopy']/born => {"1966-08-22", "1950-10-04"}
To run an expression, compile it, and then apply the compiled path to any number of context Nodes, from one or more parsed xml documents:
path := xpath.MustCompile("/library/book/isbn") root, err := xpath.Parse(file) if err != nil { log.Fatal(err) } if value, ok := path.String(root); ok { fmt.Println("Found:", value) }
Index ¶
Constants ¶
This section is empty.
Variables ¶
var NodeKinds = []string{
"Any",
"Start",
"End",
"Attr",
"Text",
"Comment",
"ProcInst",
}
Functions ¶
This section is empty.
Types ¶
type Iter ¶
type Iter struct {
// contains filtered or unexported fields
}
Iter iterates over node sets.
type Node ¶
type Node struct { Kind NodeKind Name xml.Name Attr string Text []byte Nodes []Node Pos int End int Up *Node Down []*Node }
Node is an item in an xml tree that was compiled to be processed via xml paths. A node may represent:
- An element in the xml document (<body>)
- An attribute of an element in the xml document (href="...")
- A comment in the xml document (<!--...-->)
- A processing instruction in the xml document (<?...?>)
- Some Text within the xml document
func ParseDecoder ¶
ParseDecoder parses the xml document being decoded by d and returns its root node.
func ParseHTML ¶
ParseHTML reads an HTML document from r, parses it using a proper HTML parser, and returns its root node.
The document will be processed as a properly structured HTML document, emulating the behavior of a browser when processing it. This includes putting the content inside proper <html> and <body> tags, if the provided Text misses them.
func (*Node) Bytes ¶
Bytes returns the string value of node as a byte slice. See Node.String for a description of what the string value of a node is.
func (*Node) ChildrenMap ¶
func (node *Node) ChildrenMap() interface{}
ChildrenMap returns interface{} (normally map[string]interface{}) of children
func (*Node) String ¶
String returns the string value of node.
The string value of a node is:
- For element Nodes, the concatenation of all Text Nodes within the element.
- For Text Nodes, the Text itself.
- For attribute Nodes, the attribute value.
- For comment Nodes, the Text within the comment delimiters.
- For processing instruction Nodes, the content of the instruction.
type Path ¶
type Path struct {
// contains filtered or unexported fields
}
Path is a compiled path that can be applied to a context node to obtain a matching node set. A single Path can be applied concurrently to any number of context Nodes.
func MustCompile ¶
MustCompile returns the compiled path, and panics if there are any errors.
func (*Path) Bytes ¶
Bytes returns as a byte slice the string value of the first node matched by p on the given context.
See the documentation of Node.String.