我想解析一个看起来像这样的表单:
<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
这似乎可以做到:
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
}