我开始使用Go,并且发现解析html或xml文档本身并没有强大的工具(如果没有,请原谅我的无知)。
事实是我有以下地图(我使用github.com/clbanning/mxj将xml转换为地图)。这是XML和HTML Clover报告。
我想要的是访问不同的值:XML pastebin
我的代码:
xmlFile, err := os.Open(dir + "\\clover.xml")
if err != nil {
fmt.Println("Error opening file:", err)
return
}
b, _ := ioutil.ReadAll(xmlFile)
defer xmlFile.Close()
fmt.Println("xmldata:", string(b))
// get all image tag values - []interface{}
mapvalue, merr := mxj.NewMapXml(b)
if merr != nil {
fmt.Println("merr:", merr.Error())
return
}
即使通过以下方式,我也可以对其进行细分:
sources, err := mapvalue.ValuesForKey("metrics")
if err != nil {
fmt.Println("err:", err.Error())
return
}
for i, src := range sources {
fmt.Println(i, src)
}
fmt.Println(sources[0])
这就是我需要的那个。但是现在我无法访问每个内部值。
map [-loc:459 -statements:71 -coveredmethods:14 -ncloc:307 -files:12 -conditionals:6 -coveredelements:45 -packages:8 -elements:110 -complexity:37 -classes:12 -coveredconditionals:1 -coveredstatements:30 -methods:33]
是否有更简便的方法来处理本地的XML和html?
我添加了XML来映射结果:pastebin
答案 0 :(得分:2)
GO有一个xml解析库https://golang.org/pkg/encoding/xml/
我这里有一个可运行的示例:https://play.golang.org/p/kVG3w4iu3Kl
package main
import (
"fmt"
"encoding/xml"
)
var rawXml = "<metrics coveredelements=\"45\" complexity=\"37\" loc=\"459\" methods=\"33\"/>"
type Metrics struct {
CoveredElements string `xml:"coveredelements,attr"`
Complexity string `xml:"complexity,attr"`
Loc string `xml:"loc,attr"`
Methods string `xml:"methods,attr"`
}
func main() {
data := &Metrics{}
xml.Unmarshal([]byte(rawXml), data)
fmt.Printf("%+v", data)
}
我认为您会发现使用结构要容易得多。
答案 1 :(得分:0)
我发现此实用程序使我能够实现必要的结构来解析JSON答案(可以使用converter)。我希望您也觉得它有用:
https://mholt.github.io/json-to-go/
您可以像这样http://www.utilities-online.info/xmltojson/#.W1cSCNIzZPY在线使用JSON / XML转换器。
其余部分,我使用@Rossiar在他的评论中说的相同内容。