golang 动态xml包的简要使用

dom4j

xquery

etree

最近在弄xml串的处理,找了大半天没找到和json类似动态解析,最后终于找到了etree

从上往下都试了一遍,真实累死。

需求是给两个xml 一个xml往另一个xml中插入或者更新(碰到相同的就更新值,没有的就创建节点)

dom4j bug有点多,抛弃,与java里面的完全不能比。
xmlquery 还行就是用的不太舒服,缺少一些必要的方法,比如当前节点获取path就没有(第一次用找了半天没找到,自己改源码加变量都没生效)
etree 用起来很舒服该有的貌似都有

oldDoc := etree.NewDocument()
	newDoc := etree.NewDocument()
	_, err := oldDoc.ReadFrom(bytes.NewReader(bufAll))
	_, err = newDoc.ReadFrom(bytes.NewReader(fileByte))
	CheckErr(err)
	PutAll(oldDoc.Root(), newDoc.Root())


func PutAll(oldNode *etree.Element, newNode *etree.Element) {
	childElems := newNode.ChildElements()

	if len(childElems) == 0 {
		oldNode.SetText(newNode.Text())
		return
	}

	var tempOldNode *etree.Element
	for _, childElem := range childElems {
		element := oldNode.SelectElement(childElem.Tag)

		if element != nil {
			PutAll(element, childElem)
		} else {
			tempOldNode = oldNode.CreateElement(childElem.Tag)
			PutAll(tempOldNode, childElem)
		}
	}
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值