我試圖對 html 文檔執行 xpath 操作。我想做一個兩級 xpath 查詢。html文件“index.html”如下:<!DOCTYPE html><html><head> <meta charset="UTF-8"> <title>Document</title></head><body> <div class="head"> <div class="area"> <div class="value">10</div> </div> <div class="area"> <div class="value">20</div> </div> <div class="area"> <div class="value">30</div> </div> </div></body></html>我想首先使用 class="area" 獲取所有 div,然后使用 Gokogiri 在 golang 中使用 class="value" 遞歸獲取其中的 div。我的go代碼如下:package mainimport ( "fmt" "io/ioutil" "github.com/moovweb/gokogiri" "github.com/moovweb/gokogiri/xpath")func main() { content, _ := ioutil.ReadFile("index.html") doc, _ := gokogiri.ParseHtml(content) defer doc.Free() xps := xpath.Compile("//div[@class='head']/div[@class='area']") xpw := xpath.Compile("//div[@class='value']") ss, _ := doc.Root().Search(xps) for _, s := range ss { ww, _ := s.Search(xpw) for _, w := range ww { fmt.Println(w.InnerHtml()) } }}但是,我得到的輸出很奇怪:102030102030102030我打算得到:102030我想遞歸搜索 xpath 模式。我認為我的二級 xpath 模式有問題??磥恚业牡诙?xpath 再次在整個文檔中搜索,而不是在 class="area" 的單個 div 中搜索。我該怎么做遞歸 xpath 模式搜索?我很感激任何幫助。
2 回答

慕田峪9158850
TA貢獻1794條經驗 獲得超8個贊
來自任何節點的 XPath 搜索仍然可以搜索整個樹。
如果你只想搜索子樹,你可以用 a 開始表達式.(假設你仍然想要后代或自我),否則使用精確路徑。
xps := xpath.Compile("//div[@class='head']/div[@class='area']")
xpw := xpath.Compile(".//div[@class='value']")
// this works in your example case
// xpw := xpath.Compile("div[@class='value']")
// as does this
// xpw := xpath.Compile("./div[@class='value']")
ss, _ := doc.Root().Search(xps)
for _, s := range ss {
ww, _ := s.Search(xpw)
for _, w := range ww {
fmt.Println(w.InnerHtml())
}
}
印刷:
10
20
30

慕桂英3389331
TA貢獻2036條經驗 獲得超8個贊
您的第二個查詢//div[@class='value']
將選擇文檔中任何位置的 div,而不管父元素如何。相反,嘗試div[@class='value']
。
- 2 回答
- 0 關注
- 264 瀏覽
添加回答
舉報
0/150
提交
取消