这是代码: https: //play.golang.org/p/Sizbc3uJt_c我尝试替换这个简单的循环for c := n.FirstChild; c != nil; c = c.NextSibling { indent(space+" ", c)}产生html head body a 1 a 1 div a 2 a 3当我尝试这个时if n.FirstChild != nil { indent(space+" ", n.FirstChild)}if n.FirstChild != nil && n.FirstChild.NextSibling != nil { indent(space+" ", n.FirstChild.NextSibling)}输出只有一半html head body a 1 a 1当我尝试这个时if n.FirstChild != nil { indent(space+" ", n.FirstChild)}if n.NextSibling != nil { indent(space+" ", n.NextSibling)}输出已完成,但缩进不同。结果是html head body a 1 a 1 div a 2 a 3
1 回答
白板的微信
TA贡献1883条经验 获得超3个赞
如果您想使用您建议的具有奇怪缩进的第二组代码,那么解决方案如下:
package main
import (
"fmt"
"log"
"strings"
"golang.org/x/net/html"
)
func main() {
r := strings.NewReader(`<a href="test1.html">1</a><a href="test1.html">1</a><div><a href="test2.html">2</a><a href="test3.html">3</a></div>`)
doc, err := html.Parse(r)
if err != nil {
log.Fatalln(err)
}
indent("", doc)
}
func indent(space string, n *html.Node) {
fmt.Println(space, n.Data)
if n.FirstChild != nil {
indent(space+" ", n.FirstChild)
}
if n.NextSibling != nil {
indent(space, n.NextSibling)
}
}
您只需删除+" "缩进调用的额外内容n.NextSibling,以便同级节点不会比其先前的同级节点被推出得更远。
- 1 回答
- 0 关注
- 103 浏览
添加回答
举报
0/150
提交
取消