Golang 解析xml文件标签带冒号( : )解决方案

背景:我们有项目需要使用golang语言解析rabbitmq.xml。并把里面的内容解析出来,但是在解析的时候遇到了问题,最后通过google搜索,在stackoverflow上找到了解决方案,目前好像没有中文的解决方案,所以就写下这篇博客,当其他的开发者遇到同样的问题时,可以方便排查,不走弯路。遇到无法解决的问题时请用Google,大概率还是可以找到解决方法的。

一、基础的解析XML方法

假如我们要解析如下的xml文件的内容:

<beans>
    <queue id="myQueue" name="myQueue" durable="true" auto-delete="false" exclusive="false" />
</beans>

1. 首先是构造对应的struct对象

type Beans struct {
	XMLName xml.Name `xml:"beans"`
	RabbitQueues []RabbitQueue `xml:"queue"`
}

type RabbitQueue struct {
	Name string `xml:"name,attr"`
	Id string `xml:"id,attr"`
}

2. 调用golang里面的方法,将字符串转为struct对象。然后直接利用struct对象。

var beans Beans;
content,err := ioutil.ReadFile(path+"/"+file_name)
if err != nil {
	fmt.Println(err)
}
xml.Unmarshal(content,&beans)

3. 这种情况解析一般都没什么问题,如果有不会可以搜索百度,有很多的回答。重点是介绍第二种情况

二、解析Tag带冒号的方法

1. 我们的项目需要解析的XML如下。和第一种会有区别在于<rabbit:queue> 这种tag里面是带了特殊符号( : )的。这种情况下直接构造struct并且是带:号的话,是解析会出错的。如(RabbitQueues []RabbitQueue `xml:"queue"`)

<beans xmlns="http://www.springframework.org/schema/beans"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xmlns:rabbit="http://www.springframework.org/schema/rabbit" 
    xsi:schemaLocation="http://www.springframework.org/schema/beans 
    http://www.springframework.org/schema/beans/spring-beans-3.0.xsd 
    http://www.springframework.org/schema/rabbit
    http://www.springframework.org/schema/rabbit/spring-rabbit.xsd" >

    
    <rabbit:queue id="myQueue" name="myQueue" durable="true" auto-delete="false" exclusive="false" />
    <rabbit:queue id="myQueue2" name="${xx.xxx.xx}" durable="true" auto-delete="false" exclusive="false" />


    <!-- 定义监听器 -->
	<rabbit:listener-container connection-factory="mqConnectionFactory" acknowledge="auto">
    	<rabbit:listener queues="myQueue" ref="queueListenter"/>
	</rabbit:listener-container>

	<rabbit:listener-container connection-factory="connectionFactory" >  
         <rabbit:listener  queues="mq.asdf"  ref="asdfConsumer"/>  
    </rabbit:listener-container>  
    
   
</beans>

2. 正确的方法是,在struct构造的时候,加上namespace在前面就可以了。如下struct 

重点看: RabbitQueues []RabbitQueue `xml:"http://www.springframework.org/schema/rabbit queue"`

type Beans struct {
	XMLName xml.Name `xml:"beans"`
	RabbitQueues []RabbitQueue `xml:"http://www.springframework.org/schema/rabbit queue"`
	ListenerContainers []ListenerContainer `xml:"http://www.springframework.org/schema/rabbit listener-container"`
}

type RabbitQueue struct {
	Name string `xml:"name,attr"`
	Id string `xml:"id,attr"`
}

type ListenerContainer struct {
	Listeners []RabbitListener `xml:"http://www.springframework.org/schema/rabbit listener"`
}

type RabbitListener struct {
	Queues string `xml:"queues,attr"`
}

结尾:如果看完还是有问题。可以留言,看到后会帮你解决,或者去google golang parse xml tag : 等关键词。应该是可以找到解决方案的。

 

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
©️2022 CSDN 皮肤主题:大白 设计师:CSDN官方博客 返回首页
评论 1

打赏作者

bomekkkk

你的鼓励将是我创作的最大动力

¥2 ¥4 ¥6 ¥10 ¥20
输入1-500的整数
余额支付 (余额:-- )
扫码支付
扫码支付:¥2
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、C币套餐、付费专栏及课程。

余额充值