go读取写入xml文件

读取xml

想要读取xml文件中的相关信息,xml如下图所示:


<azkaban-users>
  <user groups="azkaban" password="azkabanqweqe" roles="admin" username="azkaban">The demouser>
azkaban-users>

对应xml中内容编写结构体

//xml文件中节点
type StrResources struct {
    XMLName xml.Name    `xml:"azkaban-users"`//标签名称
    Users []User `xml:"user"` //标签名称
}

type User struct {
    XMLName    xml.Name `xml:"user"` //标签名称
    UserName string   `xml:"username,attr"` //属性
    Roles string   `xml:"roles,attr"`
    Password string   `xml:"password,attr"`
    Groups string   `xml:"groups,attr"`
    InnerText  string   `xml:",innerxml"` //内部的文本
}

标签使用介绍:
“-“:不会输出
“name,attr”:以name作为属性名
“,attr”:以这个struct的字段名作为属性名输出为XML元素的属性
“,chardata”:输出为xml的 character data而非element
“,innerxml”:被原样输出
“,comment”:将被当作xml注释来输出,字段值中不能含有”–”字符串
“omitempty”:如果该字段的值为空值那么该字段就不会被输出到XML,空值包括:false、0、nil指针或nil接口,任何长度为0的array, slice, map或者string

main方法中进行读取操作

1.读取xml文件位置
2.将文件转为对象
3.遍历读取

func main(){
    //获取xml文件位置
    content, err := ioutil.ReadFile("C:\\Users\\caoyujiao-ds\\Desktop\\test2.xml")
    if err != nil {
        fmt.Println("读文件位置错误信息:",err)
    }

    //将文件转换为对象
    var result StrResources
    err = xml.Unmarshal(content, &result)
    if err != nil {
        fmt.Println("读文件内容错误信息:",err)
    }

    fmt.Println("result:",result)
    fmt.Println("result.ResourceString:",result.Users)
    for _,o :=range  result.Users{
        log.Println("UserName:",o.XMLName)
        log.Println("UserName:",o.UserName)
        log.Println("Roles:",o.Roles)
        log.Println("Password:",o.Password)
        log.Println("Groups:",o.Groups)
        log.Println("InnerText:",o.InnerText)
    }

    fmt.Println("读取完成。。。。")
}

效果如下:

go读取写入xml文件_第1张图片

写入xml

过程与写入是相逆的

1.把字符串转对象
2.遍历拼接
3.输出xml格式
4.保存文件至指定位置

func main()  {
    var text =``
    pars := &StrRes{}
    xml.Unmarshal([]byte(text), &pars)//将字符串转为对象
    fmt.Println(pars)

    v := &StrRes{Name: "helloWorld"}
    for cp:=0;cp<3;cp++  {
        var user UserA
        user.UserName="UserName"
        user.Password="Password"
        user.Groups=strconv.Itoa(cp)
        user.InnerText="123"
        v.Users=append(v.Users,user)
    }
    //输出打印格式
    xmlOutPut, outPutErr := xml.MarshalIndent(v, "  ", "    ")
    if outPutErr!=nil {
        fmt.Println("error:",outPutErr)
    }
    fmt.Println(string(xmlOutPut))

    //保存文件
    if outPutErr == nil {
        headerBytes := []byte(xml.Header)//加入XML头
        xmlOutPutData := append(headerBytes, xmlOutPut...)//拼接XML头和实际XML内容
        //写入文件
        ioutil.WriteFile("C:\\Users\\caoyujiao-ds\\Desktop\\test4.xml", xmlOutPutData, os.ModeAppend)
        fmt.Println("输出完成。。。。")
    } else {
        fmt.Println(outPutErr)
    }
}

显示如下图:

go读取写入xml文件_第2张图片

你可能感兴趣的:(go读取写入xml文件)