使用 Go 解析任何 HTML 表单

问题描述 投票:0回答:1

我想解析一个看起来像这样的表单:

<form method="post">

  <input type="text" name="foo" value="bar"/>
  <input type="text" name="blue" value="baz"/>

</form>

我可以在 net/html 的帮助下解析这个特定的表单,但也许已经有一种方法可以将每个 HTML 表单解析为一个结构,我可以将其用于

request.PostForm()
?

例如,解析多选输入将非常困难。

有一个 Python 库可以执行此操作。在这个库的单元测试中,你看到例子:test_html_form_to_dict.py

forms go
1个回答
0
投票

这似乎可以做到:

package html

import (
   "encoding/xml"
   "io"
   "net/url"
)

type form struct {
   Input []struct {
      Name string `xml:"name,attr"`
      Value string `xml:"value,attr"`
   } `xml:"input"`
}

func newForm(r io.Reader) (*form, error) {
   f := new(form)
   err := xml.NewDecoder(r).Decode(f)
   if err != nil {
      return nil, err
   }
   return f, nil
}

func (f form) values() url.Values {
   val := make(url.Values)
   for _, input := range f.Input {
      val.Add(input.Name, input.Value)
   }
   return val
}
© www.soinside.com 2019 - 2024. All rights reserved.