Go-XPath解析

來源:互聯網
上載者:User
這是一個建立於 的文章,其中的資訊可能已經有所發展或是發生改變。

使用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的教程



相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.