Golang Gokogiri 递归 xpath 异常

我试图对 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 main


import (

    "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())

        }

    }

}

但是,我得到的输出很奇怪:


10

20

30

10

20

30

10

20

30

我打算得到:


10

20

30

我想递归搜索 xpath 模式。我认为我的二级 xpath 模式有问题。看来,我的第二级 xpath 再次在整个文档中搜索,而不是在 class="area" 的单个 div 中搜索。我该怎么做递归 xpath 模式搜索?我很感激任何帮助。


LEATH
浏览 225回答 2
2回答

慕田峪9158850

来自任何节点的 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 {&nbsp; &nbsp; ww, _ := s.Search(xpw)&nbsp; &nbsp; for _, w := range ww {&nbsp; &nbsp; &nbsp; &nbsp; fmt.Println(w.InnerHtml())&nbsp; &nbsp; }}印刷:102030

慕桂英3389331

您的第二个查询//div[@class='value']将选择文档中任何位置的 div,而不管父元素如何。相反,尝试div[@class='value']。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go