从字符串或字节数组GO创建XML解码器
我的应用程序中有一个xml解码函数,我使用xml.NewDecoder(resp.Body)来解码我的xml。NewDecoder函数接收io.Reader。但问题是,在服务器的响应中,我收到了需要忽略的前230个字节,其余的字节是我要解码的base64中编码的xml。以下是响应主体的示例:从字符串或字节数组GO创建XML解码器,xml,go,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 <
--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......
但是我不能调用xml.NewDecoder()函数,因为数据不是io.Reader类型。有没有办法从字符串中提取解码对象?:
:
或者,使用字节,您可以完全跳过读取器
和新解码器
,直接使用:
err := xml.Unmarshal(dataBytes, &myobj)
或者使用字符串
,强制转换并使用解组
:
err := xml.Unmarshal([]byte(dataStr), &myobj)
对于大型xml文件,解组速度不是很慢吗?我选择decode函数是因为它是fasterNope。
解码
比解组
更快的唯一方法是使用解码
来流式传输数据,而不是一次将所有数据加载到内存中。因为您已经在内存中存储了所有内容,所以没有任何优势。事实上,如果您需要,它所做的只是将输入包装在一个字节的读取器中。
r := bytes.NewReader(dataBytes)
err := xml.Unmarshal(dataBytes, &myobj)
err := xml.Unmarshal([]byte(dataStr), &myobj)