2022-03-29 03:37:40 +00:00
/ *
2023-02-08 14:35:27 +00:00
* FileName : utils . go
* Author : JJXu
* CreateTime : 2022 / 3 / 29 上午11 : 16
* Description :
2022-03-29 03:37:40 +00:00
* /
package simpleRequest
2023-11-17 09:03:42 +00:00
import (
"encoding/xml"
"fmt"
)
2022-03-29 03:37:40 +00:00
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 )
}
2023-10-29 01:52:45 +00:00
func IsInArray ( arr [ ] string , str string ) bool {
for _ , v := range arr {
if v == str {
return true
}
}
return false
}
2023-11-17 09:03:42 +00:00
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" `
}