func addNode(x tree.Node, p *pathexpr.PathExpr, ret *[]tree.Node) { add := false tok := x.GetToken() switch x.GetNodeType() { case tree.NtAttr: add = evalAttr(p, tok.(xml.Attr)) case tree.NtChd: add = evalChd(p) case tree.NtComm: add = evalComm(p) case tree.NtElem, tree.NtRoot: add = evalEle(p, tok.(xml.StartElement)) case tree.NtNs: add = evalNS(p, tok.(xml.Attr)) case tree.NtPi: add = evalPI(p) } if add { *ret = append(*ret, x) } }
func encTok(n tree.Node, e *xml.Encoder) error { switch n.GetNodeType() { case tree.NtAttr: return encAttr(n.GetToken().(xml.Attr), e) case tree.NtElem: return encEle(n.(tree.Elem), e) case tree.NtNs: return encNS(n.GetToken().(xml.Attr), e) case tree.NtRoot: for _, i := range n.(tree.Elem).GetChildren() { err := encTok(i, e) if err != nil { return err } } return nil } //case tree.NtChd, tree.NtComm, tree.NtPi: return e.EncodeToken(n.GetToken()) }