go解析svnlog生成的xml格式的文件

   2015-06-29 0
核心提示:这篇文章主要介绍了go解析svn log生成的xml格式的文件的方法,非常的实用,有需要的小伙伴可以参考下。

想用go做一个统计svn代码提交的工具,类似statsvn。

今天进展到了用go解析svn log生成的xml格式的文件,在go doc上找了一个Example,已经包括了一些比较典型的解析案例,但是在照葫芦画瓢的时候还是遇到了问题,有个paths下有多个path,每个path都有自己的属性和值,想同时渠道属性和值,真是费了好大的劲。

先上个svn xml 格式 log 的demo。

Example

<xml version="1.0">
<log>
<logentry
  revision="43424">
<author>fukun</author>
<date>2015-03-13T11:05:17.341130Z</date>
<paths>
<path
  kind="file"
  action="M">/BigDataPlatform/trunk/application/controllers/Enterpriseajaxapi.php</path>
<path
  kind="file"
  action="M">/BigDataPlatform/trunk/application/models/ChartDataFormater.php</path>
<path
  kind="file"
  action="M">/BigDataPlatform/trunk/application/controllers/Mediaajaxapi.php</path>
</paths>
<msg>抽象出 格式化折线图的方法</msg>
</logentry>
<logentry
  revision="43423">
<author>zhengjin</author>
<date>2015-03-13T11:04:50.450051Z</date>
<paths>
<path
  kind="file"
  action="M">/BigDataPlatform/trunk/public/static/js/mapChart.js</path>
</paths>
<msg>地图事件响应</msg>
</logentry>
</log>

解析其它的都很顺利,但是解析paths这块的时候遇到了点麻烦。如果 … Paths []Path `xml:”paths”` …,

Example

type Path struct {
  Kind string `xml:"kind,attr"`
  Action string `xml:"action,attr"`
  Path string `xml:"Path"`
} 

这样的话,只能取到一个path的值,但是如果使用 Paths []Path `xml:”paths>path”` ,又只能取到Action和Kind的值,path的value取不到。在stackoverflow上又看了几个例子,发现有个,chardata的用法,才知道原来指定value还可以这样用。将Path的struct Path 的xml定义改为 `xml:”,chardata”`,就可以顺利的取到value了。

具体的struct就不写了,如果有需要,可以到我正在开发的GoStatsvn去看看。托管在GitHub。

参考:
跟表示XML相关的数据结构

①type Name struct {
Space, Local string
}
Local表示本地名字,Space表示命名空间前缀(命名空间标示符),该类型没有提供任何方法,主要用途一般是在XML根元素上定义一个该类型,变量名必须为XMLName,类型就为:xml.Name

②Attr(属性)、CharData(字符数据)、Comment(注释)、ProcInst(处理指令)等。这些类型都是XML标准定义的表示,有兴趣可以查看XML的标准对照学习。

 
标签: go语言 生成XML
反对 0举报 0 评论 0
 

免责声明:本文仅代表作者个人观点,与乐学笔记(本网)无关。其原创性以及文中陈述文字和内容未经本站证实,对本文以及其中全部或者部分内容、文字的真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
    本网站有部分内容均转载自其它媒体,转载目的在于传递更多信息,并不代表本网赞同其观点和对其真实性负责,若因作品内容、知识产权、版权和其他问题,请及时提供相关证明等材料并与我们留言联系,本网站将在规定时间内给予删除等相关处理.

  • Go语言使用goroutine及通道实现并发详解
    Go语言使用goroutine及通道实现并发详解
    目录使用通道接收数据阻塞接收数据非阻塞接收数据接收任意数据,忽略掉接收的数据循环接收数据使用通道接收数据在上一篇文章中介绍了通道以及使用通道发送数据,本篇接着了解通道的基本内容,如何使用通道接收数据;通道的接收同样使用"-"操作符;使用通道接
  • Go语言数据结构之希尔排序示例详解 go语言堆排序
    Go语言数据结构之希尔排序示例详解 go语言堆排
    目录希尔排序算法思想图解算法Go 代码实现:总结希尔排序在插入排序中,在待排序序列的记录个数比较少,而且基本有序,则排序的效率较高。1959 年,Donald Shell 从“减少记录个数” 和 “基本有序” 两个方面对直接插入排序进行了改进,提出了希尔排序
  • go语言 nil使用避坑指南
    目录引言nil默认值nil (重点记住)nil没有默认类型不同类型的nil值占用的内存大小可能是不一样的不同类型 nil 的指针是一样的不同类型的 nil 是不能比较的引言今天笔试题遇到 var x string = nil ,问这个定义是否正确?这里给出答案:cannot use nil as strin
    02-09 gonil避坑
  • Go语言开发保证并发安全实例详解 go语言处理高
    目录什么是并发安全?Mutex悲观锁乐观锁版本号机制CAS互斥锁读写互斥锁什么是并发安全?在高并发场景下,进程、线程(协程)可能会发生资源竞争,导致数据脏读、脏写、死锁等问题,为了避免此类问题的发生,就有了并发安全。这里举一个简单的例子: var data
  • Go语言包和包管理详解 go 常用包
    目录1 包简介1.1 工作空间1.2 源文件1.3 包命名1.4 main 包2导包2.1 两种方式2.2 包的别名2.3 简洁模式2.4非导入模式(匿名导入)2.5 导包的路径2.6 远程导入3 初始化 init3.1 init总结4 包管理4.1 演变过程4.2 Go Model优点4.3 启用go module4.4 GOPROXY5 go m
  • Go语言制作svg格式树形图的示例代码
    Go语言制作svg格式树形图的示例代码
    目录什么是SVGSVG定义SVG优点预定义元素圆形 circle直线 line文字 text结点SVG格式根结点子树结点叶结点结点坐标结点文本二叉树转SVG全部源代码最近一直在刷二叉树题目,但在要验证结果时,通常用中序遍历、层序遍历查看结果,验证起来没有画图来得直观,所有
    02-09 Go树形图
  • go语言int类型最大值 go int长度
    go语言int类型最大值 go int长度
      正数的补码是自己本身负数的补码是,先取反码(首尾不反),然后+1 2.  在Go语言中  ^0表示对0取反  我们假如是4位代表一个数字的话,最高位是符号位  0在计算机中用补码的形式存在是 : 0000  取反得到  :1111  (是-1在计算机中以补码
    02-09
  • go包管理工具glide使用方法 go语言包管理工具
    golang没有官方最佳管理方案,在go的世界里存在大量的自制解决方案。go语言的包是没有中间库统一管理的,通过使用go get命令从远程代码库(github.com,goolge code 等)拉取,直接跳过中间版本库的约束,让代码的拉取直接基于源代码版本控制库开发者间的协同直
    02-09
  • [Go语言]从Docker源码学习Go——指针和Structs
    这两天在看reflect这个包在Docker中的使用时,遇到了各种问题,最后虽然知道怎么用了。但是对于这块的原理还不是太懂,于是把"THE WAY TO GO"中关键的几章看了下。继续坚持往下写,争取能说明白。源码还是先看Docker中源码, docker/api/client/cli.gotype Doc
    02-09
  • thrift简单示例 (go语言)
    这个thrift的简单示例来自于官网 (http://thrift.apache.org/tutorial/go), 因为官方提供的例子简单易懂, 所以没有必要额外考虑新的例子. 关于安装的教程, 可以参考https://www.cnblogs.com/albizzia/p/10838646.html, 关于thrift文件的语法, 可以参考: https
    02-09
点击排行