gpt4 book ai didi

xml - Go XML - 解析 HTML 中的 bool 属性导致 XML 验证错误

转载 作者:数据小太阳 更新时间:2023-10-29 03:27:54 26 4
gpt4 key购买 nike

我有一个带有以下标签的 html 输出。

<hr noshade>

我的结构是

type Hr struct {
TagName xml.Name `xml:"hr"`
}

当我尝试使用“encoding/xml”传递 html 时,它抛出一个错误,指出该属性没有 '=' 字符。

我已经看到抛出此错误是因为默认解码器评估 XML 时将 Strict 设置为 true。

如何忽略它并继续解析文档(使用 xml.Unmarshal())?

编辑:包括 XML 和使用的结构。

我找到了解码器设置,并使用了 NewDecoder,但似乎没有正确进行解码。

<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>

到目前为止我写的代码

type Anchor struct {
TagName xml.Name `xml:"a"`
Href string `xml:"href,attr"`
}

type ListEntry struct {
TagName xml.Name `xml:"li"`
Filename Anchor
}

type DirList struct {
XMLName xml.Name `xml:"ul"`
Entries []ListEntry
}

type Header struct {
TagName xml.Name `xml:"h2"`
}

type Head struct {
TagName xml.Name `xml:"head"`
title Title
}

type Title struct {
TagName xml.Name `xml:"title"`
}

type html struct {
TagName xml.Name `xml:"html"`
body Body `xml:"body"`
head Head
}

type Body struct {
H2 Header
DirectoryList DirList
hr Hr
em Em
}

type Hr struct {
TagName xml.Name `xml:"hr"`
}

type Em struct {
TagName xml.Name `xml:"em"`
link Anchor
}

contents := retrieveFromWeb()

htmlTag := html{}
decoder := xml.NewDecoder(strings.NewReader(contents))
decoder.Strict = false
decoder.AutoClose = xml.HTMLAutoClose
decoder.Entity = xml.HTMLEntity

err = decoder.Decode(&htmlTag)

fmt.Println("DirList: ", htmlTag)

当前输出

DirList:  {{ } {{{ }} {{ } []} {{ }} {{ } {{ } }}} {{ } {{ }}}}

最佳答案

您可以使用解码器来解码。使用解码器,您可以关闭严格解析并克服您面临的错误。因为你只放了一行 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) 将打印“值”

关于xml - Go XML - 解析 HTML 中的 bool 属性导致 XML 验证错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34423333/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com