我在尝试将 XMLRPC 解组到 Go Struct 时遇到一些问题
我想要解组的数据结构如下:
rawXMLData := `<methodResponse>
<params>
<param>
<value>
<struct>
<member>
<name>RESPONSECODE</name>
<value><string>68</string></value>
</member>
<member>
<name>REQUESTID</name>
<value><string>120001</string></value>
</member>
<member>
<name>MESSAGE</name>
<value><string>Currently Unavailable, Please try again later </string></value>
</member>
<member>
<name>TRANSACTIONID</name>
<value><string>271231425</string></value>
</member>
</struct>
</value>
</param>
</params>
</methodResponse>
`
Run Code Online (Sandbox Code Playgroud)
我试图将数据放入这个结构中
type Response struct {
RESPONSECODE string `xml:RESPONSECODE`
REQUESTID string `xml:REQUESTID`
MESSAGE string `xml:MESSAGE`
TRANSACTIONID string `xml:TRANSACTIONID`
}
Run Code Online (Sandbox Code Playgroud)
但当我尝试用以下命令解组它时,它不起作用
val := Response{}
err := xml.Unmarshal([]byte(rawXMLData), &val)
if err != nil {
fmt.Println(err)
}
fmt.Println("val = ", val)
//in terminal
//val = { }
Run Code Online (Sandbox Code Playgroud)
需要取的值为<name>
和<value>
,表示标签及其值(在相应的 golang 结构体中)。我认为问题是因为字段标签(对于 golang 结构)位于 xmltag 值内,而不是 xmltag 本身。我还没有找到任何关于如何访问这个值的线索。
目前我尝试了一个像这样的新结构,然后尝试手动将数组解析到结构中。
type Member struct {
Name string `xml:"name"`
Value string `xml:"value>string"`
}
type Resps struct {
XMLName xml.Name `xml:"methodResponse"`
Members []Member `xml:"params>param>value>struct>member"`
}
Run Code Online (Sandbox Code Playgroud)
并设法得到这个
value := Resps{}
xml.Unmarshal([]byte(rawXMLData), &value)
fmt.Println(value.Members)
// terminal result:
// [{RESPONSECODE 68} {REQUESTID 120001} {MESSAGE Currently Unavailable, Please try again later} //{TRANSACTIONID 271231425}]
//
// then put each of the value.Members into corresponding struct field
Run Code Online (Sandbox Code Playgroud)
是否有其他解决方案可以直接将 rawXML 数据放入第一个结构中?或者我们需要像我一样分两步解析它吗?