go xml读写

读取xml

xml文件

<?xml version="1.0" encoding="UTF-8"?>
<azkaban-users>
  <user groups="azkaban" password="azkabanqweqe" roles="admin" username="azkaban">The demo</user>
</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"` //内部的文本
}

xml标签

  • “-“:不会输出
  • “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

读取操作

func main(){
    //获取xml文件位置
    content, err := ioutil.ReadFile("C:\\Users\\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("读取完成。。。。")
}

写入

func main()  {
	//将字符串转为对象
    var text =`<azkaban-users></azkaban-users>`
    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\\Desktop\\test4.xml", xmlOutPutData, os.ModeAppend)
        fmt.Println("输出完成。。。。")
    } else {
        fmt.Println(outPutErr)
    }
}

227

评论

Your browser is out-of-date!

Update your browser to view this website correctly. Update my browser now

×