golang解析XML文件

举报
benymorre 发表于 2019/06/08 13:22:53 2019/06/08
【摘要】 在用golang解析xml文件的时候,发现有两点需要注意,一个是xml内容的总标题需要在定义struct的时候指定,另外每个标签的名字的首字母必须要大写。如下(第一个例子):package mainimport ( "encoding/xml" "fmt" "log")type Result struct { XMLName xml.Name ...


在用golang解析xml文件的时候,发现有两点需要注意,一个是xml内容的总标题需要在定义struct的时候指定,另外每个标签的名字的首字母必须要大写。


如下(第一个例子):

package main

import (
        "encoding/xml"
    "fmt"
        "log"
)

type Result struct {
        XMLName xml.Name `xml:"Person"`     
        Name    string   `xml:"FullName"`
            City    string   `xml:"city"`
        Phone   string   `xml:"tel"`
    }

func main() {
        testXML := `
<Person>
            <FullName>Grace R. Emlin</FullName>
            <city>Hanga Roa</city>
            <tel>8798732</tel>
        </Person>` 
    var A_Iters Result
    
        err := xml.Unmarshal([]byte(testXML), &A_Iters)
        if err != nil{
            log.Fatal(err)
        }        

        fmt.Println(A_Iters)

        fmt.Println(string(A_Iters.Phone))
}


该xml文件中有人名,城市,电话号码三个字段,建立一个名叫Result的struct用来保存解析后的内容。

参考: http://blog.studygolang.com/2012/12/%E6%A0%87%E5%87%86%E5%BA%93-xml%E5%A4%84%E7%90%86%EF%BC%88%E4%B8%80%EF%BC%89/


如果需要读取xml内容,并解析,可以参考以下内容 (第二个例子 )

package main

import (
        "encoding/xml"
    "fmt"
    //"io/ioutil"
    //"os"
)

type BlastFmt struct {
         XMLName xml.Name `xml:"Blastoutput"`
         BlastOprog string `xml:"BlastOutput_program"`
         BlastOver string `xml:"BlastOutput_version"`
         BlastOqueryDef string `xml:"BlastOutput_querydef"`
         BlastOqueryLen string `xml:"BlastOutput_querylen"`
}

func main() {

    //xmlFile, err := os.Open("the_Simple.xml")
        //if err != nil {
        //        fmt.Println(err)
        //}
        //defer xmlFile.Close()
        
        //byteValue, _ := ioutil.ReadAll(xmlFile)
        blastXML := `
<Blastoutput>
        <BlastOutput_program>blastn</BlastOutput_program>
        <BlastOutput_version>blastn 2.2.26</BlastOutput_version>
        <BlastOutput_querydef>EGFR_A1</BlastOutput_querydef>
        <BlastOutput_querylen>600</BlastOutput_querylen>
</Blastoutput>`

    var blastIters BlastFmt    
        xml.Unmarshal([]byte(blastXML), &blastIters)
        
        fmt.Println(blastIters)
        fmt.Println(blastIters.BlastOver)
        fmt.Println(blastIters.BlastOprog)
}

以上解析的是一个简单例子,目的是解析 blast的结果文件,一种xml格式的结果。


如果要解析更为复杂的xml文件, 或者xml转为json文件,可以参考

https://tutorialedge.net/golang/parsing-xml-with-golang/

https://www.thepolyglotdeveloper.com/2017/03/parse-xml-data-in-a-golang-application/

【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。