Go-XPath解析

来源:互联网 发布:dota2多核优化启动项 编辑:程序博客网 时间:2024/05/21 17:02

使用Go做爬虫首先想到了XPath解析来做于是上网搜在github上找到了一个Go写的Xpath的库貌似是官方维护的

官方地址: http://gopkg.in/xmlpath.v1

   xmlpath.v1 中只有三个结构体

Node 代表当前解析出来的节点 并且该节点是被处理过的可以被Path访问的

Path 代表指定的寻找路径

Iter Node的集合

这么讲很不清楚还是上代码讲解吧

package mainimport ("fmt""os"xmlpath "gopkg.in/xmlpath.v1")func main() {//nodename()//getFieldValue()getSpecifiedValue()}var file *os.Filevar node *xmlpath.Nodefunc init() {var err errorfile, err = os.OpenFile("t.xml", os.O_RDWR, os.ModePerm)if err != nil {panic("openFile failed!!!")}//解析文件获得经过处理的并且可以被path访问的Node类型的nodenode, err = xmlpath.Parse(file)if err != nil {panic("xmlpath parse file failed!!!")}}func nodename() {//bookstore为根节点编译过后得到一个*Path类型的值path := xmlpath.MustCompile("bookstore")//可能会有多本书所以使用path.Iter(node)获取该节点下面的node集合也就是iteratorit := path.Iter(node)//判断是否有下一个for it.Next() {//如果有把当前的Node节点取出 并打印出值fmt.Println(it.Node().String())}}func getFieldValue() {//选取全文中属性包含@lang的节点 而不管他的位置path := xmlpath.MustCompile("//@lang")it := path.Iter(node)for it.Next() {fmt.Println(it.Node().String())}//选取全文中属性包含lang并且值为en的节点 而不管他的位置path = xmlpath.MustCompile("//*[@lang=\"en\"]")it = path.Iter(node)for it.Next() {fmt.Println(it.Node().String())}}func getSpecifiedValue() {//选取Bookstore中的第二本书的title节点path := xmlpath.MustCompile("/bookstore/book[2]/title")fmt.Println(path.String(node))}

以上为简单的示例 想要深入可以看w3c关于xpath的教程



0 0
原创粉丝点击