2 回答
TA贡献1744条经验 获得超4个赞
您可以使用解码器来解组。使用解码器,您可以关闭严格解析并克服您面临的错误。由于您只放置了一行 xml/html 进行解析,因此我假设根元素和 hr 标记之间的某些值和下面的值是示例实现
package main
import (
"encoding/xml"
"fmt"
"strings"
)
type Hr struct {
XMLName xml.Name `xml:"a"`
TagName string `xml:"hr"`
}
func main() {
s := "<a><hr noshade>value</hr></a>"
hr := &Hr{}
d := xml.NewDecoder(strings.NewReader(s))
d.Strict = false
err := d.Decode(hr)
if err != nil {
panic(err)
}
fmt.Println(hr.TagName)
}
fmt.Println(hr.TagName) 将打印“值”
TA贡献1840条经验 获得超5个赞
您的代码中有很多错误:
如果属性不是公开的,则不能被另一个包访问(
xml
在这种情况下):将所有属性设为大写。li 缺少标签名称。
看到这个工作代码
http://play.golang.org/p/rkNf2OfvdM
package main
import (
"encoding/xml"
"fmt"
"log"
"strings"
)
type Anchor struct {
XMLName xml.Name `xml:"a"`
Href string `xml:"href,attr"`
}
type ListEntry struct {
XMLName xml.Name `xml:"li"`
Filename Anchor
}
type DirList struct {
XMLName xml.Name `xml:"ul"`
Entries []ListEntry `xml:"li"`
}
type Header struct {
XMLName xml.Name `xml:"h2"`
}
type Head struct {
XMLName xml.Name `xml:"head"`
Title Title
}
type Title struct {
XMLName xml.Name `xml:"title"`
}
type Html struct {
XMLName xml.Name `xml:"html"`
Body Body `xml:"body"`
Head Head
}
type Body struct {
H2 Header
DirectoryList DirList
Hr Hr
Em Em
}
type Hr struct {
XMLName xml.Name `xml:"hr"`
}
type Em struct {
XMLName xml.Name `xml:"em"`
link Anchor
}
var contents = `<html><head><title>Some title</title></head>
<body>
<h2>Title here</h2>
<ul>
<li><a href="../">..</a></li>
<li><a href="file1.txt">file1.txt</a></li>
<li><a href="file2.zip">file2.zip</a></li>
</ul>
<hr noshade><em>Powered by <a href="http://subversion.apache.org/">Apache Subversion</a> version 1.7.18 (r1615261).</em>
</body></html>`
func main() {
htmlTag := Html{}
decoder := xml.NewDecoder(strings.NewReader(contents))
decoder.Strict = false
decoder.AutoClose = xml.HTMLAutoClose
decoder.Entity = xml.HTMLEntity
err := decoder.Decode(&htmlTag)
if err != nil {
log.Fatal(err)
}
fmt.Printf("DirList: %v %#[1]v\n", htmlTag)
}
- 2 回答
- 0 关注
- 160 浏览
添加回答
举报