golang解析xml

解析xml标签或者html标签,都是xml文档格式。要是返回的html标签,可以用第三方依赖库goquery来解析。

下面说下,解析xml标签的格式。直接上代码,代码如下:

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

type SConfig struct {
  XMLName  xml.Name `xml:"config"` // 指定最外层的标签为config
  SmtpServer string `xml:"smtpServer"` // 读取smtpServer配置项,并将结果保存到SmtpServer变量中
  SmtpPort int `xml:"smtpPort"`
  Sender string `xml:"sender"`
  SenderPasswd string `xml:"senderPasswd"`
  Receivers SReceivers `xml:"receivers"` // 读取receivers标签下的内容,以结构方式获取
}
 
type SReceivers struct {
  Flag string `xml:"flag,attr"` // 读取flag属性
  User []string `xml:"user"` // 读取user数组
}
 
func main() {
  file, err := os.Open("servers.xml") // For read access.
  if err != nil {
    fmt.Printf("error: %v", err)
    return
  }
  defer file.Close()
  data, err := ioutil.ReadAll(file)
  if err != nil {
    fmt.Printf("error: %v", err)
    return
  }
  v := SConfig{}
  err = xml.Unmarshal(data, &v)
  if err != nil {
    fmt.Printf("error: %v", err)
    return
  }
 
  fmt.Println(v)
  fmt.Println("SmtpServer : ",v.SmtpServer)
  fmt.Println("SmtpPort : ",v.SmtpPort)
  fmt.Println("Sender : ",v.Sender)
  fmt.Println("SenderPasswd : ",v.SenderPasswd)
  fmt.Println("Receivers.Flag : ",v.Receivers.Flag)
  for i,element := range v.Receivers.User {
    fmt.Println(i,element)
  }
}

 

 举例:xml 格式如下:文件名,servers.xml

 <config>
   <smtpServer>smtp.163.com</smtpServer>
   <smtpPort>25</smtpPort>
   <sender>user@163.com</sender>
  <senderPasswd>123456</senderPasswd>
   <receivers flag="true">
    <age>16</age>
     <user>Mike_Zhang@live.com</user>
     <user>test1@qq.com</user>
  </receivers>
 </config>

 

在代码里,先针对xml的格式,创建对应的struct结构体,

type SConfig struct{
 ...
}
然后,读取xml文件,读取data,再解析对应的标签。

  执行结果如下:

 

转载于:https://www.cnblogs.com/unqiang/p/10722282.html

可以使用 Go 标准库中的 `encoding/xml` 和 `html/template` 包来实现将 XML 转换为 HTML 的功能。 首先,你需要定义一个结构体来存放 XML 数据,例如: ```go type Person struct { XMLName xml.Name `xml:"person"` Name string `xml:"name"` Age int `xml:"age"` } ``` 这个结构体对应一个 XML 格式的数据: ```xml <person> <name>John</name> <age>30</age> </person> ``` 接下来,你可以使用 `encoding/xml` 包中的 `Unmarshal` 函数将 XML 数据解析为结构体: ```go data := []byte(` <person> <name>John</name> <age>30</age> </person> `) var person Person err := xml.Unmarshal(data, &person) if err != nil { panic(err) } ``` 此时,`person` 变量就包含了 XML 数据的内容。 最后,你可以使用 `html/template` 包中的模板引擎来生成 HTML 代码: ```go templateStr := ` <html> <head> <title>{{.Name}}'s page</title> </head> <body> <h1>{{.Name}}</h1> <p>Age: {{.Age}}</p> </body> </html> ` t, err := template.New("webpage").Parse(templateStr) if err != nil { panic(err) } var buf bytes.Buffer err = t.Execute(&buf, person) if err != nil { panic(err) } htmlCode := buf.String() fmt.Println(htmlCode) ``` 在这个例子中,我们使用了一个简单的模板,将 XML 数据转换为 HTML 页面。`{{.Name}}` 和 `{{.Age}}` 是模板中的占位符,它们会被实际的数据替换掉。 完整的示例代码如下: ```go package main import ( "bytes" "encoding/xml" "fmt" "html/template" ) type Person struct { XMLName xml.Name `xml:"person"` Name string `xml:"name"` Age int `xml:"age"` } func main() { data := []byte(` <person> <name>John</name> <age>30</age> </person> `) var person Person err := xml.Unmarshal(data, &person) if err != nil { panic(err) } templateStr := ` <html> <head> <title>{{.Name}}'s page</title> </head> <body> <h1>{{.Name}}</h1> <p>Age: {{.Age}}</p> </body> </html> ` t, err := template.New("webpage").Parse(templateStr) if err != nil { panic(err) } var buf bytes.Buffer err = t.Execute(&buf, person) if err != nil { panic(err) } htmlCode := buf.String() fmt.Println(htmlCode) } ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值