38 lines
671 B
Go
38 lines
671 B
Go
package gluaxmlpath
|
|
|
|
import (
|
|
"bytes"
|
|
"github.com/yuin/gopher-lua"
|
|
xmlpath "gopkg.in/xmlpath.v2"
|
|
)
|
|
|
|
var api = map[string]lua.LGFunction{
|
|
"loadxml": loadXml,
|
|
"compile": compile,
|
|
}
|
|
|
|
func loadXml(L *lua.LState) int {
|
|
xmlStr := L.CheckString(1)
|
|
r := bytes.NewReader([]byte(xmlStr))
|
|
node, err := xmlpath.ParseHTML(r)
|
|
if err != nil {
|
|
L.Push(lua.LNil)
|
|
L.Push(lua.LString(err.Error()))
|
|
return 2
|
|
}
|
|
L.Push(newNode(L, node))
|
|
return 1
|
|
}
|
|
|
|
func compile(L *lua.LState) int {
|
|
xpathStr := L.CheckString(1)
|
|
path, err := xmlpath.Compile(xpathStr)
|
|
if err != nil {
|
|
L.Push(lua.LNil)
|
|
L.Push(lua.LString(err.Error()))
|
|
return 2
|
|
}
|
|
L.Push(newPath(L, path))
|
|
return 1
|
|
}
|