Golang xml/encoding RawToken() 中的错误?

Bug in Golang xml/encoding RawToken()?

提问人:AnthonyGP 提问时间:8/10/2023 最后编辑:kostixAnthonyGP 更新时间:8/10/2023 访问量:50

问:

我有一个 Go 代码:

xmlData := `<foo xmlns:="url"/>`
xmlDec := xml.NewDecoder(bytes.NewReader([]byte(xmlData)))
rawToken, _ := xmlDec.RawToken()
fmt.Println(rawToken)

现在有趣的部分,让我们使用 Go 1.14.0

输出:{{ foo} [{{xmlns } url}]}

切换到 Go 1.18.0

输出:{{ foo} [{{ xmlns:} url}]}

在第一个输出中 = 和xml.Name.Space"xmlns"xml.Name.Local = ""

在第二个输出中 = 和xml.Name.Space""xml.Name.Local = "xmlns:"

谁能解释一下这是怎么回事?

GO 封送 XML 命名空间

评论

4赞 Siebe Jongebloed 8/10/2023
<foo xmlns:="url"/>不是正确的命名空间。不要使用 () 或定义命名空间的前缀 (:<foo xmlns="url"/><foo xmlns:abc="url"/>)
0赞 AnthonyGP 8/10/2023
@SiebeJongebloed确实,这个想法是拥有与 Go 1.14 相同的输出。那么 = 也是无效的!但正如你所看到的,它在 Go 1.18 中被解析了。不确定仅在xml无效的情况下xml.Name.Local"xmlns:"
0赞 Siebe Jongebloed 8/10/2023
我建议两个版本都应该在第 2 行引发错误
1赞 JimB 8/10/2023
在这些版本的过程中,有一堆 xml 错误修复,您是否检查过是否有任何适用于命名空间处理的问题?
1赞 JimB 8/10/2023
我不知道,只是想给你指出一些关于行为可能在哪里发生了变化的线索。我记得一些关于命名空间的事情,但已经有几年了。

答: 暂无答案