从字符串或字节数组GO

时间:2017-09-01 20:52:32

标签: xml go

我的应用程序中有一个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对象?

1 个答案:

答案 0 :(得分:2)

Yes there is

r := strings.NewReader(dataStr)

And likewise for byte arrays

r := bytes.NewReader(dataBytes)

或者,使用字节,您可以完全跳过ReaderNewDecoder,直接使用Unmarshal

err := xml.Unmarshal(dataBytes, &myobj)

或使用string投射并使用Unmarshal

err := xml.Unmarshal([]byte(dataStr), &myobj)