gpt4 book ai didi

go - 如何用两个手动调用替换简单的两匝回路(棘手)

转载 作者:行者123 更新时间:2023-12-01 22:26:43 26 4
gpt4 key购买 nike

这是代码: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

最佳答案

如果您想使用第二组代码,建议您使用奇怪的缩进,下面是解决方案:

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,以使同级节点不会比其先前的同级节点进一步推出。

关于go - 如何用两个手动调用替换简单的两匝回路(棘手),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59527440/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com