html - 在 Go 中解析 HTML 输入标签

标签 html forms parsing go

围棋 HTML parsing package忽略输入标签并将它们解释为表单标签的文本内容。绕过此限制的最佳选择是什么?

package main

import (
    "fmt"
    "strings"

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

const HTML = ` 
<!DOCTYPE html>
<html lang="en">
     <head>
        <meta charset="utf-8"/>
        <title>selected attribute</title>
    </head>
    <body>
        <form method="GET">
            <input type="submit" value="submit"/>
        </form>
    </body>
</html>
`

func main() {
    z := html.NewTokenizer(strings.NewReader(HTML))
    tt := html.TokenType(7)
    for tt != html.ErrorToken {
        tt = z.Next()
        if tt == html.StartTagToken {
            name, _ := z.TagName()
            fmt.Println(string(name))
        }
    }
}

最佳答案

ignores input tags and interprets them as text content of the form tag

你的前提是错误的,它不会忽略输入标签,如下所示:

package main
                                                                                                                                                                                                                                    
import (
    "fmt"
    "golang.org/x/net/html"
    "strings"
)

const HTML = ` 
<!DOCTYPE html>
<html lang="en">
    <head>
        <meta charset="utf-8"/>
        <title>selected attribute</title>
    </head>
    <body>
        <form method="GET">
            <input type="submit" value="submit"/>
        </form>
    </body>
</html>
`

func main() {
    z, _ := html.Parse(strings.NewReader(HTML))
    var f func(*html.Node)
    f = func(n *html.Node) {
        if n.Type == html.ElementNode && n.Data == "input" {
            for _, a := range n.Attr {
                if a.Key == "value" {
                    fmt.Println(a.Val)
                    break
                }
            }
        }
        for c := n.FirstChild; c != nil; c = c.NextSibling {
            f(c)
        }
    }
    f(z)
}

这将打印出“提交”,即输入标签的值。

关于html - 在 Go 中解析 HTML 输入标签,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50613921/

相关文章:

javascript - 两个onclick事件

javascript - 如何设置一个随着窗口大小变化而变化的位置

javascript - HTML/JS : Calling a value from an object constructed onload in <body>

forms - Play Framework 2.1/复杂对象的表单映射

响应式背景图片上的 html 文本

javascript - Dynamics CRM -- 在表单脚本中处理 onLoad 与 OnSave 事件

forms - 将 Applicative Form 迁移到 Monadic - 获取当前时间戳

java - 获取 JSON 字符串的值并获取值

android - 在 Android Studio 中从 JSON 获取值(value)

java - 我可以使用 ANTLR 进行双向解析/生成吗?