-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathutils.go
112 lines (99 loc) · 2.33 KB
/
utils.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
/*
*FileName: utils.go
*Author: JJXu
*CreateTime: 2022/3/29 上午11:16
*Description:
*/
package simpleRequest
import (
"encoding/xml"
"fmt"
)
func IsJSONType(ct string) bool {
return jsonCheck.MatchString(ct)
}
// IsXMLType method is to check XML content type or not
func IsXMLType(ct string) bool {
return xmlCheck.MatchString(ct)
}
func IsInArray(arr []string, str string) bool {
for _, v := range arr {
if v == str {
return true
}
}
return false
}
type xmlMapEntry struct {
XMLName xml.Name
Value interface{} `xml:",chardata"`
}
// func MapToXml(data map[string]any) ([]byte, error) {
// xmlData, err := mapToXML(data)
// if err != nil {
// return nil, err
// }
// return xml.MarshalIndent(xmlData, "", " ")
// }
//
// func mapToXML(m map[string]interface{}) (xmlMap map[string]xmlMapEntry, err error) {
// if len(m) > 1 {
// return nil, errors.New("xml format must have a root name,the map value must like this: map[string]interface{}{\"rootName\":map[string]interface{}{}}")
// }
// xmlMap = make(map[string]xmlMapEntry)
// var rootName string
// for root, data := range m {
// rootName = root
// for k, v := range data.(map[string]interface{}) {
// switch typeV := v.(type) {
// case map[string]interface{}:
// subXmlMap, err := mapToXML(typeV)
// if err != nil {
// return
// }
//
// default:
// entry := xmlMapEntry{XMLName: xml.Name{Local: k}, Value: v}
// xmlMap[k] = entry
// }
// }
// }
//
// xmlData := struct {
// XMLName xml.Name
// Data []xmlMapEntry `xml:",any"`
// }{
// XMLName: xml.Name{Local: rootName},
// Data: make([]xmlMapEntry, 0, len(xmlMap)),
// }
//
// for _, v := range xmlMap {
// xmlData.Data = append(xmlData.Data, v)
// }
//
// return xml.MarshalIndent(xmlData, "", " ")
// }
func mapToXML(m map[string]interface{}) ([]byte, error) {
xmlData := make([]xmlNode, 0)
for k, v := range m {
node := xmlNode{
XMLName: xml.Name{Local: k},
}
switch value := v.(type) {
case map[string]interface{}:
childXML, err := mapToXML(value)
if err != nil {
return nil, err
}
node.Data = childXML
default:
node.Data = []byte(fmt.Sprintf("%v", v))
}
xmlData = append(xmlData, node)
}
return xml.MarshalIndent(xmlData, "", " ")
}
type xmlNode struct {
XMLName xml.Name
Data []byte `xml:",innerxml"`
}