go 解析xml

hgs19921112發表於2019-08-18
package main
import (
	_ "bufio"
	"os"
	"fmt"
	"encoding/xml"
	"io/ioutil"
	"strings"
)
type Property struct {
	Name string
	Value string
	Description string
}
type Configuration struct{
	Property []Property
}
func main(){
	//1.透過讀取整個檔案來解析xml
	data,err := ioutil.ReadFile("f://core-default.xml")
	res := string(data)
	//將對應的標籤字母開頭大寫 ,因為xml是透過反射解析的,否則無法訪問該屬性,如果已經大寫,則不需替換
	resC := strings.ReplaceAll(res, "configuration>", "Configuration>")
	resP := strings.ReplaceAll(resC, "property>", "Property>")
	resN := strings.ReplaceAll(resP, "name>", "Name>")
	resV := strings.ReplaceAll(resN, "value>", "Value>")
	resD := strings.ReplaceAll(resV, "description>", "Description>")
	//fmt.Println(string(data))
	if err != nil {
		fmt.Println("read file err",err)
	}
	//decoder := xml.NewDecoder(file)
	var conf Configuration
	
	xml.Unmarshal([]byte(resD), &conf)
	//file.Close()
	var cnt int = len(conf.Property)
	fmt.Println("cnt:",cnt)
	fmt.Println(conf)
	//for index ,value := range config.Property{
	//	fmt.Print
	//}
	fmt.Println("----------------------------------------------------------------------")
	fmt.Println("----------------------------------------------------------------------")
	fmt.Println("----------------------------------------------------------------------")
	fmt.Println("----------------------------------------------------------------------")
	fmt.Println("----------------------------------------------------------------------")
	fmt.Println("----------------------------------------------------------------------")
	fmt.Println("----------------------------------------------------------------------")
	
	//透過reader的方式解析xml
	//下面無法替換標籤開頭為大寫,解析失敗
	lfile,lerr := os.Open("f://core-default.xml")
	
	if lerr != nil {
		fmt.Println("read file err",err)
	}
	decoder := xml.NewDecoder(lfile)
	var lconf Configuration
	decoder.Decode(lconf)
	lfile.Close()
	fmt.Println(lconf)
	
	
	
}


來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/31506529/viewspace-2654052/,如需轉載,請註明出處,否則將追究法律責任。