登录
首页 >  Golang >  Go问答

如何获取标签的内部 HTML 或文本?

来源:stackoverflow

时间:2024-04-20 19:48:34 317浏览 收藏

“纵有疾风来,人生不言弃”,这句话送给正在学习Golang的朋友们,也希望在阅读本文《如何获取标签的内部 HTML 或文本?》后,能够真的帮助到大家。我也会在后续的文章中,陆续更新Golang相关的技术文章,有好的建议欢迎大家在评论留言,非常感谢!

问题内容

我们如何根据下面的示例获取锚文本的值?这是我的代码。我可以使用 html.elementnode 获取 hreftitle 的值。我需要仅使用 golang.org/x/net/html 来获取文本的值,而不使用其他库。

示例:从 text xyz 中,我想获取“text xyz”。

// html.ElementNode works for getting href and title value but no text value with TextNode. 
if n.Type == html.TextNode && n.Data == "a" {
    for _, a := range n.Attr {
        if a.Key == "href" {
            text = a.Val
        }
    }
}

正确答案


给定 html:

go to example 1

some para text

go to example 2

您只希望看到文字吗?

go to example 1
go to example 2

您期望内部 html 吗?

go to exampleexample 1
go to exampleexample 2

或者,你还期待别的吗?

以下程序仅提供文本或内部 html。每次找到锚节点时,它都会保存该节点,然后继续沿着该节点的树向下移动。当它遇到其他节点时,它会检查已保存的节点,并附加 textnodes 的文本或将节点的 html 呈现到缓冲区。最后,在遍历所有子节点并重新遇到保存的锚节点后,它会打印文本字符串和 html 缓冲区,重置两个变量,然后将锚节点清零。

我想到了使用缓冲区和 html.render,并保存来自 Golang parse HTML, extract all content with tags 的特定节点。

以下内容也在 the Playground 中:

package main

import (
    "bytes"
    "fmt"
    "io"
    "strings"

    "golang.org/x/net/html"
)

func main() {
    s := `
    go to example 1
    

some para text

go to example 2 ` doc, _ := html.parse(strings.newreader(s)) var nanchor *html.node var stxt string var bufinnerhtml bytes.buffer w := io.writer(&bufinnerhtml) var f func(*html.node) f = func(n *html.node) { if n.type == html.elementnode && n.data == "a" { nanchor = n } if nanchor != nil { if n != nanchor { // don't write the a tag and its attributes html.render(w, n) } if n.type == html.textnode { stxt += n.data } } for c := n.firstchild; c != nil; c = c.nextsibling { f(c) } if n == nanchor { fmt.println("text:", stxt) fmt.println("innerhtml:", bufinnerhtml.string()) stxt = "" bufinnerhtml.reset() nanchor = nil } } f(doc) }
Text: Go to example 1
InnerHTML: Go to exampleexample 1
Text: Go to example 2
InnerHTML: Go to exampleexample 2

以上就是《如何获取标签的内部 HTML 或文本?》的详细内容,更多关于的资料请关注golang学习网公众号!

声明:本文转载于:stackoverflow 如有侵犯,请联系study_golang@163.com删除
相关阅读
更多>
最新阅读
更多>
课程推荐
更多>