微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

解组转义XML

在Go中,我将如何解码此 XML响应?我已经尝试在我的Answer结构上构建一个自定义的UnMarshal方法,但我没有太多运气.

<?xml version="1.0"?>
<GetAssignmentResponse>
    <Answer>&lt;?xml version="1.0" encoding="UTF-8" standalone="no"?&gt;
        &lt;QuestionFormAnswers xmlns="http://mechanicalturk.amazonaws.com/AWSmechanicalturkDataSchemas/2005-10-01/QuestionFormAnswers.xsd"&gt;
        &lt;Answer&gt;
        &lt;QuestionIdentifier&gt;Q1HasEvents&lt;/QuestionIdentifier&gt;
        &lt;FreeText&gt;no&lt;/FreeText&gt;
        &lt;/Answer&gt;
        &lt;/QuestionFormAnswers&gt;
    </Answer>
</GetAssignmentResponse>

解决方法

像这样解码它两次( try on playground)

package main

import (
    "encoding/xml"
    "fmt"
)

var data = `<?xml version="1.0"?>
<GetAssignmentResponse>
    <Answer>&lt;?xml version="1.0" encoding="UTF-8" standalone="no"?&gt;
        &lt;QuestionFormAnswers xmlns="http://mechanicalturk.amazonaws.com/AWSmechanicalturkDataSchemas/2005-10-01/QuestionFormAnswers.xsd"&gt;
        &lt;Answer&gt;
        &lt;QuestionIdentifier&gt;Q1HasEvents&lt;/QuestionIdentifier&gt;
        &lt;FreeText&gt;no&lt;/FreeText&gt;
        &lt;/Answer&gt;
        &lt;/QuestionFormAnswers&gt;
    </Answer>
</GetAssignmentResponse>`

type Response struct {
    XMLName xml.Name `xml:"GetAssignmentResponse"`
    Answer  string   `xml:"Answer"`
}

type Answer struct {
    XMLName  xml.Name `xml:"QuestionFormAnswers"`
    FreeText string   `xml:"FreeText"`
}

func main() {
    v := Response{}
    err := xml.Unmarshal([]byte(data),&v)
    if err != nil {
        fmt.Printf("error: %v",err)
        return
    }
    fmt.Printf("Answer = %q\n",v.Answer)
    a := Answer{}
    err = xml.Unmarshal([]byte(v.Answer),&a)
    if err != nil {
        fmt.Printf("error: %v",err)
        return
    }
    fmt.Printf("Answer = %#v\n",a)
}

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。