commit 6470d250fbe92a90a2c0d0d5a07b0f7dff806333 Author: 李光春 Date: Thu May 26 23:48:28 2022 +0800 - init diff --git a/.drone.yml b/.drone.yml new file mode 100644 index 0000000..c56c479 --- /dev/null +++ b/.drone.yml @@ -0,0 +1,17 @@ +kind: pipeline +type: docker +name: clone + +steps: + - name: Test + image: golang:1.18 + commands: + - go env -w GO111MODULE=on + - go env -w GOPROXY=https://goproxy.cn,direct + - go test -v ./... + - name: Benchmark + image: golang:1.18 + commands: + - go env -w GO111MODULE=on + - go env -w GOPROXY=https://goproxy.cn,direct + - go test -bench=. -benchmem \ No newline at end of file diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..4794692 --- /dev/null +++ b/.gitignore @@ -0,0 +1,9 @@ +.env +.git +.svn +.idea +.vscode +*.log +goinit.sh +gomod.sh +/vendor/ \ No newline at end of file diff --git a/go.mod b/go.mod new file mode 100644 index 0000000..b94f359 --- /dev/null +++ b/go.mod @@ -0,0 +1,3 @@ +module go.dtapp.net/goxml + +go 1.18 diff --git a/goxml.go b/goxml.go new file mode 100644 index 0000000..d8d169b --- /dev/null +++ b/goxml.go @@ -0,0 +1,43 @@ +package goxml + +import ( + "encoding/xml" + "io" + "strings" +) + +func XmlDecode(data string) map[string]string { + decoder := xml.NewDecoder(strings.NewReader(data)) + result := make(map[string]string) + key := "" + for { + token, err := decoder.Token() //读取一个标签或者文本内容 + if err == io.EOF { + return result + } + if err != nil { + return result + } + switch tp := token.(type) { //读取的TOKEN可以是以下三种类型:StartElement起始标签,EndElement结束标签,CharData文本内容 + case xml.StartElement: + se := xml.StartElement(tp) //强制类型转换 + if se.Name.Local != "xml" { + key = se.Name.Local + } + if len(se.Attr) != 0 { + //读取标签属性 + } + case xml.EndElement: + ee := xml.EndElement(tp) + if ee.Name.Local == "xml" { + return result + } + case xml.CharData: //文本数据,注意一个结束标签和另一个起始标签之间可能有空格 + cd := xml.CharData(tp) + data := strings.TrimSpace(string(cd)) + if len(data) != 0 { + result[key] = data + } + } + } +} diff --git a/version.go b/version.go new file mode 100644 index 0000000..00857b7 --- /dev/null +++ b/version.go @@ -0,0 +1,3 @@ +package goxml + +const Version = "1.0.0" diff --git a/version_test.go b/version_test.go new file mode 100644 index 0000000..71f25fa --- /dev/null +++ b/version_test.go @@ -0,0 +1,7 @@ +package goxml + +import "testing" + +func TestVersion(t *testing.T) { + t.Log(Version) +}