解组 XML RPC 的值

Ilh*_*nto 5 struct go

我在尝试将 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 数据放入第一个结构中?或者我们需要像我一样分两步解析它吗?