go xml 解析

<?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>
### 回答1: Go 语言支持多种方式解析 XML,其中最常用的是内置的 encoding/xml 包。该包提供了简单易用的 API,可以快速有效地解析 XML 文档。 下面是一个简单的示例: ``` package main import ( "encoding/xml" "fmt" "os" ) type Person struct { XMLName xml.Name `xml:"person"` Name string `xml:"name"` Age int `xml:"age"` } func main() { xmlFile, err := os.Open("person.xml") if err != nil { fmt.Println("Error opening XML file:", err) return } defer xmlFile.Close() var person Person decoder := xml.NewDecoder(xmlFile) err = decoder.Decode(&person) if err != nil { fmt.Println("Error decoding XML:", err) return } fmt.Println("Person:", person) } ``` 这段代码将解析如下所示的 XML 文档: ``` <person> <name>John Doe</name> <age>30</age> </person> ``` 在上面的代码中,我们定义了一个 Person 结构体,并使用 xml 包中的 xml.Name 和 xml 标签标记指定 XML 文档中字段的名称。然后,我们使用 os 包的 os.Open() 函数打开 XML 文件,并使用 xml.NewDecoder() 函数创建一个解码器。最后,我们调用 decoder.Decode() 函数解码 XML 文档,并将解析出的内容存储在 person 结构体中。 ### 回答2: goxml是一个用于解析XMLGo语言库。它提供了一组功能丰富且易于使用的工具,帮助开发人员轻松地解析和操作XML文档。 使用goxml解析xml非常简单。首先,我们需要导入goxml库: ```go import "github.com/microcosm-cc/bluemonday" ``` 然后,我们可以使用goxml的`NewParser`函数创建一个解析器对象: ```go parser := goxml.NewParser() ``` 接下来,我们可以使用解析器的`ParseString`方法将XML字符串解析为一个`xml.Document`对象: ```go xmlString := "<example><tag>Hello, GoXML!</tag></example>" doc, err := parser.ParseString(xmlString) if err != nil { fmt.Printf("解析XML时发生错误:%s\n", err) } ``` 一旦我们有了`xml.Document`对象,我们就可以使用它来访问和操作XML文档的元素和属性。例如,我们可以使用`SelectElement`方法选择特定的元素: ```go element, err := doc.SelectElement("example/tag") if err != nil { fmt.Printf("选择元素时发生错误:%s\n", err) } ``` 然后,我们可以使用`Content`方法获取元素的文本内容: ```go content := element.Content() fmt.Printf("元素的内容:%s\n", content) ``` 我们还可以使用`SelectAttr`方法选择元素的属性: ```go attrValue, err := element.SelectAttr("attr") if err != nil { fmt.Printf("选择属性时发生错误:%s\n", err) } ``` 最后,我们可以使用`element.SetContent`方法设置元素的文本内容或使用`element.SetAttr`方法设置元素的属性。 通过这样简单的几个步骤,我们可以轻松地使用goxml解析和操作XML文档。它提供了方便且直观的接口,使得解析XML变得非常简单和高效。无论是处理小型还是大型XML文档,goxml都能满足开发人员的需求。 ### 回答3: goxml是一个使用Go语言编写的用于解析XML文档的库。它提供了简洁、高效、灵活的API,使开发者能够轻松地解析和处理XML数据。 使用goxml,我们可以通过以下步骤来解析XML文档: 1. 导入goxml库。我们可以使用go get命令获取库的源代码,并使用import语句将其引入到我们的代码中。 2. 打开并读取XML文件。通过调用库提供的函数,我们可以打开XML文件,并将其内容读取到内存中。 3. 创建XML解析器。使用goxml的函数,我们可以创建一个新的XML解析器对象。解析器可以处理不同的解析选项,比如是否忽略标签大小写、是否跳过注释等。 4. 解析XML文档。通过调用解析器的Parse函数,我们可以开始解析XML文档。解析器会逐行读取XML内容,并将其转换为解析器可处理的数据结构。 5. 处理解析的数据。一旦解析器完成解析过程,我们可以使用提供的API来访问解析后的数据。我们可以遍历XML文档的元素、属性和文本等内容,以及执行相应的操作。 6. 关闭解析器和文件。在我们完成XML解析和数据处理后,我们应该关闭解析器和文件,以释放资源和确保代码的稳定性。 总之,goxml是一个功能强大且易于使用的库,用于解析XML文档。它提供了各种功能和选项,使开发者能够在Go语言中轻松处理XML数据。无论是从文件读取XML文档还是从网络获取XML数据,goxml都能帮助我们解析、处理和操作XML,使我们的应用程序更加强大和灵活。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值