go xml 解析

来源:互联网 发布:河北经济直播软件 编辑:程序博客网 时间:2024/05/22 19:22
<?xml version="1.0" encoding="utf-8"?>
<DAS LocalPort="8250">
    <DataSource>
        <Device ED="UNIT1" LN="10.10.0.5:102" ET="" PL="PointsList.csv" />            
    </DataSource>
    <DataDest LN="Host=192.168.108.22:8200;User=test;Pwd=123456" ET=""/>
</DAS>
------------------------------------------------------------------------------

package main
import (
    "encoding/xml"
    "fmt"
    "io/ioutil"
    "os"
)
type Das struct {
    XMLName    xml.Name `xml:"DAS"`
    LocalPort  string   `xml:"LocalPort,attr"`
    DataSource []DS     `xml:"DataSource"`
    DataDest   []DD     `xml:DataDest`
}
type DS struct {
    Device []DV `xml:"Device"`
}
type DV struct {
    ED string `xml:"ED,attr"`
    LN string `xml:"LN,attr"`
    ET string `xml:"ET,attr"`
    PL string `xml:"PL,attr"`
}
type DD struct {
    LN string `xml:"LN,attr"`
    ET string `xml:"ET,attr"`
}
func Parser(FileName string) {
    file, err := os.Open(FileName)
    if err != nil {
        fmt.Println(err)
    }
    defer file.Close()
    data, err := ioutil.ReadAll(file)
    if err != nil {
        fmt.Println(err)
    }
    root := Das{}
    err = xml.Unmarshal(data, &root)
    if err != nil {
        fmt.Println(err)
    }
    fmt.Println(root.XMLName)
    fmt.Println("LocalPort:", root.LocalPort)
    for _, ds := range root.DataSource {
        for _, dv := range ds.Device {
            fmt.Println("ED:", dv.ED)
            fmt.Println("LN:", dv.LN)
            fmt.Println("ET:", dv.ET)
            fmt.Println("PL:", dv.PL)
        }
    }
    for _, dd := range root.DataDest {
        fmt.Println("ET:", dd.ET)
        fmt.Println("LN:", dd.LN)
    }
}
func MakeXml(XmlFile string) {
    f, err := os.Create(XmlFile)
    if err != nil {
        fmt.Println(err)
        return
    }
    defer f.Close()
    das := Das{}
    das.LocalPort = "8200"
    ds := DS{}
    dv := DV{}
    dv.ED = "Data source"
    dv.LN = "127.0.0.1:8100"
    dv.ET = "NONE"
    ds.Device = append(ds.Device, dv)
    das.DataSource = append(das.DataSource, ds)
    dd := DD{}
    dd.LN = "127.0.0.1:8200"
    dd.ET = "test"
    das.DataDest = append(das.DataDest, dd)
    f.Write([]byte(xml.Header))
    output, err := xml.MarshalIndent(das, "  ", "    ")
    f.Write(output)
    return
}
func main() {
    Parser("das.xml")
    MakeXml("NewDas.xml")
}
------------------------------------------------------------------------------

{ DAS}

LocalPort: 8250

ED: UNIT1

LN: 10.10.0.5:102

ET:

PL: PointsList.csv

ET:

LN: Host=192.168.108.22:8200;User=test;Pwd=123456

------------------------------------------------------------------------------
NewDas.xml
<?xml version="1.0" encoding="UTF-8"?>
  <DAS LocalPort="8200">
      <DataSource>
          <Device ED="Data source" LN="127.0.0.1:8100" ET="NONE" PL=""></Device>
      </DataSource>
      <DataDest LN="127.0.0.1:8200" ET="test"></DataDest>
  </DAS>
0 0
原创粉丝点击