电话
400 9058 355
go 的 `xml.unmarshal` 仅能解析单个顶层 xml 元素;当输入是多个同名、并列的根级元素(如多个 `
在 Go 中处理 XML 数据时,一个常见误区是假设 xml.Unmarshal 能自动识别并解析多个同级、无父容器的 XML 元素(例如 vSphere 返回的 otherIdentifyingInfo 字段中连续出现的多个
✅ 正确解法是改用 xml.Decoder,它支持流式解析,可反复调用 Decode 方法逐个读取独立的 XML 元素:
func parseHostIdentifiers(xmlData string) ([]struct {
IdentifierValue string `xml:"identifierValue"`
IdentifierType struct {
Label string `xml:"label"`
Summary string `xml:"summary"`
Key string `xml:"key"`
} `xml:"identifierType"`
}, error) {
var results []struct {
IdentifierValue string `xml:"identifierValue"`
IdentifierType struct {
Label string `xml:"label"`
Summary string `xml:"summary"`
Key string `xml:"key"`
} `xml:"identifierType"`
}
decoder := xml.NewDecoder(strings.NewReader(xmlData))
for {
var item struct {
IdentifierValue string `xml:"identifierValue"`
IdentifierType struct {
Label string `xml:"label"`
Summary string `xml:"summary"`
Key string `xml:"key"`
} `xml:"identifierType"`
}
err := decoder.Decode(&item)
if err == io.EOF {
break
}
if err != nil {
return nil, fmt.Errorf("failed to decode HostSystemIdentificationInfo: %w", err)
}
results = append(results, item)
}
return results, nil
}⚠️ 注意事项:
根元素:即使类型定义为切片,xml.Unmarshal 仍要求输入 XML 有唯一根(如 总结:面对多个并列 XML 元素,放弃 xml.Unmarshal,拥抱 xml.Decoder —— 这是 Go 标准库对“非标准 XML 片段”最稳健、最符合设计意图的处理方式。
邮箱:8955556@qq.com
Q Q:8955556
本文详解如何将Go官方present工具(用于生成HTML5...
PySNMP在不同版本中对SNMP错误状态(errorSta...
time.Sleep仅阻塞当前goroutine,其他gor...
PHPfopen()创建含特殊符号的文件名失败主因是操作系统...
WooCommerce中通过代码为分组产品动态聚合子商品的属...
io.ReadFull返回io.ErrUnexpectedE...
本文详解Yii2中控制器向视图传递ActiveRecord数...
本文详解为何通过wp_set_object_terms()为...
Pytest中使用@mock.patch类装饰器会导致补丁泄...
带缓冲的channel是并发安全的FIFO队列;make(c...