Go语言解析Xml,当标签内有属性并且有文本值时应该这样定义结构体

您所在的位置:网站首页 officeplus插件无法解析属性type的值 Go语言解析Xml,当标签内有属性并且有文本值时应该这样定义结构体

Go语言解析Xml,当标签内有属性并且有文本值时应该这样定义结构体

2023-10-22 03:32| 来源: 网络整理| 查看: 265

前言

       对不起大家哈,我已经很久没有写博客记录了,并不是没时间呀,主要是下班了就想好好休息…

回归正题 一、问题描述

使用go语言解析xml结构时,我需要定义一个结构体用来装,这时我遇到一个傻眼的xml复杂结构,如下

Mill w/SMART

这里可以看到Xml内的 Description 节点,它不仅拥有文本值 “Mill w/SMART” 还有属性(manufacturer、serialNumber) 这个时候我就不知道怎么定义结构体了。没解决之前,我的结构体是如下定义的:

type MTConnectDevicesDevice struct { XMLName xml.Name `xml:"Device"` //当前标签名称 Id string `xml:"id,attr"` //当前标签名称的属性id Name string `xml:"name,attr"` //当前标签名称的属性name Uuid string `xml:"uuid,attr"` //当前标签名称的属性uuid Description MTConnectDevicesDescription `xml:"Description"` //当前子标签名称Description } type MTConnectDevicesDescription struct { XMLName xml.Name `xml:"Description"` //当前标签名称 Manufacturer string `xml:"manufacturer,attr"` //当前标签名称的属性 manufacturer SerialNumber string `xml:"serialNumber,attr"` //当前标签名称的属性 serialNumber }

这个使用 xml.Unmarshal() 解析之后,结构体“MTConnectDevicesDescription” 它只能获取 Xml内 Description 节点的属性(manufacturer、serialNumber) 它们的值,并没有获取到他的文本值“Mill w/SMART”

二、解决问题

按以上定义的结构体当然是获取不到的,这里呢其实并不难,只是我刚使用Go 语言来操作Xml,有很多函数和语法都不太熟悉。 来吧,其实只要再定义一个结构体的属性来接收这个文本值就好了 (XMLValue string xml:",innerxml" )

type MTConnectDevicesDescription struct { XMLName xml.Name `xml:"Description"` //当前标签名称 XMLValue string `xml:",innerxml"` //取当前节点的文本值 Manufacturer string `xml:"manufacturer,attr"` //当前标签名称的属性 manufacturer SerialNumber string `xml:"serialNumber,attr"` //当前标签名称的属性 serialNumber }

就是 XMLValue 来接收当前节点的文本值。记得加这一句==>xml:",innerxml"

三、致谢

enmm…这里说一下哈,前面有博客留下联系方式,我给重新编辑删除了,因为我消息爆炸了哈哈哈,不好意思,如果找我有事呢,可以私信我,有时间我一定回复的哈。谢谢大家,我撤了。



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3