gpt4 book ai didi

go - 如何使用 Go 获取 XML 元素的所有属性?

转载 作者:IT王子 更新时间:2023-10-29 01:42:39 26 4
gpt4 key购买 nike

我正在尝试像这样解析 xml 内容以及 XML 元素的所有属性

type Node struct {
XMLName xml.Name
Attributes []xml.Attr `xml:",attr"`
BodyElements string `xml:",innerxml"`
Nodes []Node `xml:",any"`
}

var xmldata = []byte("<div><div data-id=\"images/6C7161080\" data-imagesize=\"medium\" data-alignment=\"none\"></div></div>")

func walk(nodes []Node, f func(Node) bool) {
for _, n := range nodes {
if f(n) {
walk(n.Nodes, f)
}
}
}


func main() {

buf := bytes.NewBuffer(xmldata)
dec := xml.NewDecoder(buf)

var n Node
err := dec.Decode(&n)
if err != nil {
panic(err)
}

walk([]Node{n}, func(n Node) bool {
if n.XMLName.Local == "p" {
fmt.Println(string(n.BodyElements))
} else if n.XMLName.Local == "div"{
fmt.Println(string(n.BodyElements))
fmt.Println(len(n.Attributes))
}
return true
})
}

但是 len(n.Attributes) 的值始终为 0。我该怎么做才能获得给定元素中的所有属性。注意:属性名称不是常量,因为有时元素可以是“div”标签或“img”标签或其他东西。所以我不能将属性名称用作

DataId string `xml:"data-id,attr"`

最佳答案

根本问题是将 XML 解码到您的 struct Node 不起作用。您的 BodyElements 捕获根节点的全部内容,并且没有任何内容被解码到您的 Nodes。 (顺便说一句:添加一个简单的 fmt.Printf 会揭示这一点。)

您为什么尝试编写自己的 XML 解码/解析代码?你会失败的。只需使用 Decoder 和 Token 方法手动解析您的 XML,一个标记接一个标记,手动填充您的树。并且:如果您的 XML 实际上是 HTML,您可能希望使用 html 包对其进行解析。

关于go - 如何使用 Go 获取 XML 元素的所有属性?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30704336/

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