我的应用程序中有一个xml解码函数,我使用xml.NewDecoder(resp.Body)来解码我的xml。 NewDecoder函数接收一个io.Reader。但问题是,在我从服务器的响应中,我收到了我需要忽略的前230个字节,剩下的字节是我要解码的base64中编码的xml。这是响应主体的一个例子:
--RandomCaracteres...
Content-Type: application/xml; charset=UTF-8; name=response_xml
<Response success="1"/>
--RandomCaracteres...
Content-Type: text/xml; name=report.xml
Content-Transfer-Encoding: base64
PE5leHBvc2VSZXBvcnQgdmVyc2lvbj0iMi4wIj4KPHNjYW5zPgo8c2NhbiBpZD0iNDYwMCIgbmFt......
我只需要读取PE5leHBvc2VSZXBv ...数据。使用以下代码,我可以阅读xml:
bodyBytes, _ := ioutil.ReadAll(resp.Body)
defer resp.Body.Close()
data, err := base64.StdEncoding.DecodeString(string(bodyBytes)[230:])
fmt.Println(data)
但我无法调用xml.NewDecoder()函数,因为数据不是io.Reader类型。有没有办法从字符串中创建Decode对象?
答案 0 :(得分:2)
r := strings.NewReader(dataStr)
r := bytes.NewReader(dataBytes)
或者,使用字节,您可以完全跳过Reader
和NewDecoder
,直接使用Unmarshal
:
err := xml.Unmarshal(dataBytes, &myobj)
或使用string
投射并使用Unmarshal
:
err := xml.Unmarshal([]byte(dataStr), &myobj)