wxpay icon indicating copy to clipboard operation
wxpay copied to clipboard

XmlToMap方法有Bug,我是这样修改的

Open jay-wlj opened this issue 6 years ago • 0 comments

type xmlMapEntry struct { XMLName xml.Name Value string xml:",chardata" }

func (m Params) MarshalXML(e *xml.Encoder, start xml.StartElement) error { if len(m) == 0 { return nil } start.Name.Local = "xml" // 更改xml开始标签 err := e.EncodeToken(start) if err != nil { return err }

for k, v := range m {
	e.Encode(xmlMapEntry{XMLName: xml.Name{Local: k}, Value: v})
}

return e.EncodeToken(start.End())

}

func (m *Params) UnmarshalXML(d *xml.Decoder, start xml.StartElement) error { *m = Params{} for { var e xmlMapEntry

	err := d.Decode(&e)
	if err == io.EOF {
		break
	} else if err != nil {
		return err
	}

	(*m)[e.XMLName.Local] = e.Value
}
return nil

}

func XmlToMap(xmlStr string) Params {

params := make(Params)
err := xml.Unmarshal([]byte(xmlStr), &params)
if err != nil {
	panic(err)
}
return params
// params := make(Params)
// decoder := xml.NewDecoder(strings.NewReader(xmlStr))

// var (
// 	key   string
// 	value string
// )

// for t, err := decoder.Token(); err == nil; t, err = decoder.Token() {
// 	switch token := t.(type) {
// 	case xml.StartElement: // 开始标签
// 		key = token.Name.Local
// 	case xml.CharData: // 标签内容
// 		content := string([]byte(token))
// 		value = content
// 	}
// 	if key != "xml" {
// 		if value != "\n" && value != "\n  " {
// 			params.SetString(key, value)
// 		}
// 	}
// }

return params

}

func MapToXml(params Params) string { buf, err := xml.Marshal(params) if err != nil { panic(err) } return string(buf) // var buf bytes.Buffer // buf.WriteString(<xml>) // for k, v := range params { // buf.WriteString(<) // buf.WriteString(k) // buf.WriteString(><![CDATA[) // buf.WriteString(v) // buf.WriteString(]]></) // buf.WriteString(k) // buf.WriteString(>) // } // buf.WriteString(</xml>)

// return buf.String()

}

jay-wlj avatar Jun 11 '19 02:06 jay-wlj