无法解析Go代码中的值

时间:2018-07-10 07:20:57

标签: go xml-parsing html-parsing

我开始使用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

2 个答案:

答案 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在他的评论中说的相同内容。