<a href="https://github.com/donnie4w/dom4g">dom4j</a>
<a href="https://github.com/antchfx/xquery">xquery</a>
<a href="https://github.com/beevik/etree">etree</a>
最近在弄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)
}
}
}
```
有疑问加站长微信联系(非本文作者)