为了账号安全,请及时绑定邮箱和手机立即绑定

Golang Gokogiri 递归 xpath 异常

Golang Gokogiri 递归 xpath 异常

Go
LEATH 2021-08-10 16:17:27
我试图对 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条经验 获得超7个赞

来自任何节点的 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


查看完整回答
反对 回复 2021-08-10
?
慕桂英3389331

TA贡献2036条经验 获得超8个赞

您的第二个查询//div[@class='value']将选择文档中任何位置的 div,而不管父元素如何。相反,尝试div[@class='value']


查看完整回答
反对 回复 2021-08-10
  • 2 回答
  • 0 关注
  • 224 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信