func EXSLTnodeset(context xpath.VariableScope, args []interface{}) interface{} { if len(args) < 1 { return nil } c := context.(*ExecutionContext) nodes := args[0] switch v := nodes.(type) { case []unsafe.Pointer: if len(v) == 0 { return nil } fauxroot := c.Output.CreateElementNode("VARIABLE") for _, node := range v { n := xml.NewNode(node, nil) fauxroot.AddChild(n) } out := xml.Nodeset{fauxroot} return out.ToPointers() default: out := fmt.Sprintf("%v", v) fmt.Println("invalid argument to exslt:nodeset", out) } return nodes }
//Implementation of document() from XSLT spec func XsltDocumentFn(context xpath.VariableScope, args []interface{}) interface{} { if len(args) < 1 { return nil } c := context.(*ExecutionContext) switch doc := args[0].(type) { case string: if doc == "" { nodeset := xml.Nodeset{c.Style.Doc} return nodeset.ToPointers() } input := c.FetchInputDocument(doc, false) if input != nil { nodeset := xml.Nodeset{input} return nodeset.ToPointers() } return nil case []unsafe.Pointer: n := xml.NewNode(doc[0], nil) location := n.Content() input := c.FetchInputDocument(location, true) if input != nil { nodeset := xml.Nodeset{input} return nodeset.ToPointers() } fmt.Println("DOCUMENT", location) } return nil }
// Implementation of current() from XSLT spec func XsltCurrent(context xpath.VariableScope, args []interface{}) interface{} { c := context.(*ExecutionContext) n := xml.Nodeset{c.Current} return n.ToPointers() }