golang 动态 xml 包的简要使用

本贴最后更新于 273 天前,其中的信息可能已经渤澥桑田

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)
		}
	}
}
  • golang

    Go 语言是 Google 推出的一种全新的编程语言,可以在不损失应用程序性能的情况下降低代码的复杂性。谷歌首席软件工程师罗布派克(Rob Pike)说:我们之所以开发 Go,是因为过去 10 多年间软件开发的难度令人沮丧。Go 是谷歌 2009 发布的第二款编程语言。

    409 引用 • 1311 回帖 • 683 关注
  • 日常
    17 引用 • 106 回帖

赞助商 我要投放

回帖
请输入回帖内容 ...