Go递归函数countWordsAndImages返回0值问题求助
问题解决:HTML节点统计单词和图片数量始终返回0
你的代码核心问题出在遍历子节点的循环逻辑上:
在遍历当前节点的子节点时,你写的是:
for c := n.FirstChild; c != nil; c = n.NextSibling {
这里每次迭代时,c被赋值为n.NextSibling(当前节点的兄弟节点),而不是c.NextSibling(当前子节点的下一个兄弟节点)。这会导致循环只处理第一个子节点,后续所有子节点都被跳过,递归无法覆盖整个HTML节点树,最终统计结果自然为0。
修正后的代码
import ( "bufio" "strings" "golang.org/x/net/html" ) func countWordsAndImages(n *html.Node) (words, images int) { if n.Type == html.TextNode { words += wordCount(n.Data) } else if n.Type == html.ElementNode && n.Data == "img" { images++ } // 修正循环:遍历子节点的下一个兄弟 for c := n.FirstChild; c != nil; c = c.NextSibling { tmpWords, tmpImages := countWordsAndImages(c) words += tmpWords images += tmpImages } return } func wordCount(s string) int { n := 0 scan := bufio.NewScanner(strings.NewReader(s)) scan.Split(bufio.ScanWords) for scan.Scan() { n++ } return n }
关键修正点
把循环条件里的c = n.NextSibling改为c = c.NextSibling,这样才能依次遍历当前节点的所有子节点,递归处理整个HTML树的每个节点,正确统计文本中的单词数和img标签数量。
内容的提问来源于stack exchange,提问作者SAUL ROJAS
相关产品推荐
相关产品推荐

