Documentation ¶
Overview ¶
Package etree provides XML services through an Element Tree abstraction.
Index ¶
- Constants
- Variables
- type Attr
- type CData
- type CharData
- type Comment
- type Directive
- type Document
- func (d *Document) Copy() *Document
- func (d *Document) Indent(spaces int)
- func (d *Document) IndentTabs()
- func (d *Document) ReadFrom(r io.Reader) (n int64, err error)
- func (d *Document) ReadFromBytes(b []byte) error
- func (d *Document) ReadFromFile(filename string) error
- func (d *Document) ReadFromString(s string) error
- func (d *Document) Root() *Element
- func (d *Document) SetRoot(e *Element)
- func (d *Document) WriteTo(w io.Writer) (n int64, err error)
- func (d *Document) WriteToBytes() (b []byte, err error)
- func (d *Document) WriteToFile(filename string) error
- func (d *Document) WriteToString() (s string, err error)
- type Element
- func (e *Element) AddChild(t Token)
- func (e *Element) ChildElements() []*Element
- func (e *Element) Copy() *Element
- func (e *Element) CreateAttr(key, value string) *Attr
- func (e *Element) CreateCharData(data string) *CharData
- func (e *Element) CreateComment(comment string) *Comment
- func (e *Element) CreateDirective(data string) *Directive
- func (e *Element) CreateElement(tag string) *Element
- func (e *Element) CreateProcInst(target, inst string) *ProcInst
- func (e *Element) FindElement(path string) *Element
- func (e *Element) FindElementPath(path Path) *Element
- func (e *Element) FindElements(path string) []*Element
- func (e *Element) FindElementsPath(path Path) []*Element
- func (e *Element) InsertChild(ex Token, t Token)
- func (e *Element) Parent() *Element
- func (e *Element) RemoveAttr(key string) *Attr
- func (e *Element) RemoveChild(t Token) Token
- func (e *Element) SelectAttr(key string) *Attr
- func (e *Element) SelectAttrValue(key, dflt string) string
- func (e *Element) SelectElement(tag string) *Element
- func (e *Element) SelectElements(tag string) []*Element
- func (e *Element) SetText(text string)
- func (e *Element) Text() string
- func (e *Element) WriteCData(text string)
- type ErrPath
- type Path
- type ProcInst
- type Token
- type WriteSettings
Examples ¶
Constants ¶
const (
// NoIndent is used with Indent to disable all indenting.
NoIndent = -1
)
Variables ¶
var ErrXML = errors.New("etree: invalid XML format")
ErrXML is returned when XML parsing fails due to incorrect formatting.
Functions ¶
This section is empty.
Types ¶
type Attr ¶
type Attr struct {
Space, Key string // The attribute's namespace and key
Value string // The attribute value string
}
An Attr represents a key-value attribute of an XML element.
type CharData ¶
type CharData struct { Data string // contains filtered or unexported fields }
CharData represents character data within XML.
func NewCharData ¶
NewCharData creates a parentless XML character data entity.
type Comment ¶
type Comment struct { Data string // contains filtered or unexported fields }
A Comment represents an XML comment.
func NewComment ¶
NewComment creates a parentless XML comment.
type Directive ¶
type Directive struct { Data string // contains filtered or unexported fields }
A Directive represents an XML directive.
func NewDirective ¶
NewDirective creates a parentless XML directive.
type Document ¶
type Document struct { Element WriteSettings WriteSettings }
A Document is a container holding a complete XML hierarchy. Its embedded element contains zero or more children, one of which is usually the root element. The embedded element may include other children such as processing instructions or BOM CharData tokens.
Example (Creating) ¶
Create an etree Document, add XML entities to it, and serialize it to stdout.
doc := NewDocument() doc.CreateProcInst("xml", `version="1.0" encoding="UTF-8"`) doc.CreateProcInst("xml-stylesheet", `type="text/xsl" href="style.xsl"`) people := doc.CreateElement("People") people.CreateComment("These are all known people") jon := people.CreateElement("Person") jon.CreateAttr("name", "Jon O'Reilly") sally := people.CreateElement("Person") sally.CreateAttr("name", "Sally") doc.Indent(2) doc.WriteTo(os.Stdout)
Output: <?xml version="1.0" encoding="UTF-8"?> <?xml-stylesheet type="text/xsl" href="style.xsl"?> <People> <!--These are all known people--> <Person name="Jon O'Reilly"/> <Person name="Sally"/> </People>
Example (Reading) ¶
doc := NewDocument() if err := doc.ReadFromFile("document.xml"); err != nil { panic(err) }
Output:
func NewDocument ¶
func NewDocument() *Document
NewDocument creates an XML document without a root element.
func (*Document) Indent ¶
Indent modifies the document's element tree by inserting CharData entities containing carriage returns and indentation. The amount of indentation per depth level is given as spaces. Pass etree.NoIndent for spaces if you want no indentation at all.
func (*Document) IndentTabs ¶
func (d *Document) IndentTabs()
IndentTabs modifies the document's element tree by inserting CharData entities containing carriage returns and tabs for indentation. One tab is used per indentation level.
func (*Document) ReadFrom ¶
ReadFrom reads XML from the reader r into the document d. It returns the number of bytes read and any error encountered.
func (*Document) ReadFromBytes ¶
ReadFromBytes reads XML from the byte slice b into the document d.
func (*Document) ReadFromFile ¶
ReadFromFile reads XML from the string s into the document d.
func (*Document) ReadFromString ¶
ReadFromString reads XML from the string s into the document d.
func (*Document) Root ¶
Root returns the root element of the document, or nil if there is no root element.
func (*Document) SetRoot ¶
SetRoot replaces the document's root element with e. If the document already has a root when this function is called, then the document's original root is unbound first. If the element e is bound to another document (or to another element within a document), then it is unbound first.
func (*Document) WriteTo ¶
WriteTo serializes an XML document into the writer w. It returns the number of bytes written and any error encountered.
func (*Document) WriteToBytes ¶
WriteToBytes serializes the XML document into a slice of bytes.
func (*Document) WriteToFile ¶
WriteToFile serializes an XML document into the file named filename.
func (*Document) WriteToString ¶
WriteToString serializes the XML document into a string.
type Element ¶
type Element struct {
Space, Tag string // namespace and tag
Attr []Attr // key-value attribute pairs
Child []Token // child tokens (elements, comments, etc.)
// contains filtered or unexported fields
}
An Element represents an XML element, its attributes, and its child tokens.
func NewElement ¶
NewElement creates an unparented element with the specified tag. The tag may be prefixed by a namespace and a colon.
func (*Element) AddChild ¶
AddChild adds the token t as the last child of element e. If token t was already the child of another element, it is first removed from its current parent element.
func (*Element) ChildElements ¶
ChildElements returns all elements that are children of element e.
func (*Element) Copy ¶
Copy creates a recursive, deep copy of the element and all its attributes and children. The returned element has no parent but can be parented to a another element using AddElement, or to a document using SetRoot.
func (*Element) CreateAttr ¶
CreateAttr creates an attribute and adds it to element e. The key may be prefixed by a namespace and a colon. If an attribute with the key already exists, its value is replaced.
func (*Element) CreateCharData ¶
CreateCharData creates an XML character data entity and adds it as a child of element e.
func (*Element) CreateComment ¶
CreateComment creates an XML comment and adds it as a child of element e.
func (*Element) CreateDirective ¶
CreateDirective creates an XML directive and adds it as the last child of element e.
func (*Element) CreateElement ¶
CreateElement creates an element with the specified tag and adds it as the last child element of the element e. The tag may be prefixed by a namespace and a colon.
func (*Element) CreateProcInst ¶
CreateProcInst creates a processing instruction and adds it as a child of element e.
func (*Element) FindElement ¶
FindElement returns the first element matched by the XPath-like path string. Panics if an invalid path string is supplied.
func (*Element) FindElementPath ¶
FindElementPath returns the first element matched by the XPath-like path string.
func (*Element) FindElements ¶
FindElements returns a slice of elements matched by the XPath-like path string. Panics if an invalid path string is supplied.
func (*Element) FindElementsPath ¶
FindElementsPath returns a slice of elements matched by the Path object.
func (*Element) InsertChild ¶
InsertChild inserts the token t before e's existing child token ex. If ex is nil (or if ex is not a child of e), then t is added to the end of e's child token list. If token t was already the child of another element, it is first removed from its current parent element.
func (*Element) Parent ¶
Parent returns the element token's parent element, or nil if it has no parent.
func (*Element) RemoveAttr ¶
RemoveAttr removes and returns the first attribute of the element whose key matches the given key. The key may be prefixed by a namespace and a colon. If an equal attribute does not exist, nil is returned.
func (*Element) RemoveChild ¶
RemoveChild attempts to remove the token t from element e's list of children. If the token t is a child of e, then it is returned. Otherwise, nil is returned.
func (*Element) SelectAttr ¶
SelectAttr finds an element attribute matching the requested key and returns it if found. The key may be prefixed by a namespace and a colon.
func (*Element) SelectAttrValue ¶
SelectAttrValue finds an element attribute matching the requested key and returns its value if found. The key may be prefixed by a namespace and a colon. If the key is not found, the dflt value is returned instead.
func (*Element) SelectElement ¶
SelectElement returns the first child element with the given tag. The tag may be prefixed by a namespace and a colon.
func (*Element) SelectElements ¶
SelectElements returns a slice of all child elements with the given tag. The tag may be prefixed by a namespace and a colon.
func (*Element) WriteCData ¶
type ErrPath ¶
type ErrPath string
ErrPath is returned by path functions when an invalid etree path is provided.
type Path ¶
type Path struct {
// contains filtered or unexported fields
}
A Path is an object that represents an optimized version of an XPath-like search string. Although path strings are XPath-like, only the following limited syntax is supported:
. Selects the current element .. Selects the parent of the current element * Selects all child elements // Selects all descendants of the current element tag Selects all child elements with the given tag [#] Selects the element of the given index (1-based, negative starts from the end) [@attrib] Selects all elements with the given attribute [@attrib='val'] Selects all elements with the given attribute set to val [tag] Selects all elements with a child element named tag [tag='val'] Selects all elements with a child element named tag and text equal to val | Selects the predicate on either side of the '|' operator
Examples:
Select the title elements of all descendant book elements having a 'category' attribute of 'WEB':
//book[@category='WEB']/title
Select the first book element with a title child containing the text 'Great Expectations':
.//book[title='Great Expectations'][1]
Starting from the current element, select all children of book elements with an attribute 'language' set to 'english':
./book/*[@language='english']
Select all descendant book elements whose title element has an attribute 'language' set to 'french':
//book/title[@language='french']/..
Select all title and year elements:
//title|//year
Example ¶
xml := `<bookstore><book><title>Great Expectations</title> <author>Charles Dickens</author></book><book><title>Ulysses</title> <author>James Joyce</author></book></bookstore>` doc := NewDocument() doc.ReadFromString(xml) for _, e := range doc.FindElements(".//book[author='Charles Dickens']") { doc := NewDocument() doc.SetRoot(e.Copy()) doc.Indent(2) doc.WriteTo(os.Stdout) }
Output: <book> <title>Great Expectations</title> <author>Charles Dickens</author> </book>
func CompilePath ¶
CompilePath creates an optimized version of an XPath-like string that can be used to query elements in an element tree.
func MustCompilePath ¶
MustCompilePath creates an optimized version of an XPath-like string that can be used to query elements in an element tree. Panics if an error occurs. Use this function to create Paths when you know the path is valid (i.e., if it's hard-coded).
type ProcInst ¶
A ProcInst represents an XML processing instruction.
func NewProcInst ¶
NewProcInst creates a parentless XML processing instruction.
type Token ¶
type Token interface { Parent() *Element // contains filtered or unexported methods }
A Token is an empty interface that represents an Element, CharData, Comment, Directive, or ProcInst.
type WriteSettings ¶
type WriteSettings struct { // CanonicalEndTags forces the production of XML end tags, even for // elements that have no child elements. Default: false. CanonicalEndTags bool // CanonicalText forces the production of XML character references for // text data characters &, <, and >. If false, XML character references // are also produced for " and '. Default: false. CanonicalText bool // CanonicalAttrVal forces the production of XML character references for // attribute value characters &, < and ". If false, XML character // references are also produced for > and '. Default: false. CanonicalAttrVal bool }
WriteSettings allow for changing the serialization behavior of the WriteTo* methods.