gpt4 book ai didi

xml - 如何使用go检查XML文件中是否存在标签?

转载 作者:IT王子 更新时间:2023-10-29 01:44:09 27 4
gpt4 key购买 nike

我不知道 XML 文件中存在的标签。我想知道某个标签是否存在。例如,假设文件是​​这样的:

<?xml version='1.1' encoding='UTF-8'?>
<tag1>
<tag2></tag2>
</tag1>
<tag3/>

这里我想检查 tag2 是否存在。使用 go 解析 XML 文件的唯一方法是定义 structs,但为此,我必须知道文件中存在哪些标签,而我不知道

最佳答案

您可以使用事件驱动 XML 解析。创建一个 xml.Decoder使用 xml.NewDecoder() , 并通过调用 Decoder.Token() 解析 XML 的内容反复(循环)。

您可以使用 type assertion 检查标记是否为起始元素, 检查 xml.StartElement类型。如果断言成功,您可以检查元素的名称是否与您要查找的名称匹配。

它可能是这样的:

func checkTag(src, tag string) (bool, error) {
decoder := xml.NewDecoder(strings.NewReader(src))

for {
t, err := decoder.Token()
if err != nil {
if err == io.EOF {
return false, nil
}
return false, err
}
if se, ok := t.(xml.StartElement); ok {
if se.Name.Local == tag {
return true, nil
}
}
}
}

测试它:

func main() {
fmt.Println(checkTag(src, "tag2"))
fmt.Println(checkTag(src, "tagX"))
}

const src = `<?xml version='1.0' encoding='UTF-8'?>
<tag1>
<tag2></tag2>
</tag1>
<tag3/>`

输出(在 Go Playground 上尝试):

true <nil>
false <nil>

如您所见,在源 XML 中正确找到了 tag2,而没有正确找到 tagX

参见相关问题:Unmarshalling heterogeneous list of XML elements in Go

关于xml - 如何使用go检查XML文件中是否存在标签?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51648974/

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