首页 > 解决方案 > 从其值中解组 XML RPC

问题描述

我在尝试将 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>
`

我正在尝试将数据放入此结构中

type Response struct {
    RESPONSECODE  string `xml:RESPONSECODE`
    REQUESTID     string `xml:REQUESTID`
    MESSAGE       string `xml:MESSAGE`
    TRANSACTIONID string `xml:TRANSACTIONID`
}

但它不起作用,当我试图用

val := Response{}
err := xml.Unmarshal([]byte(rawXMLData), &val)
    if err != nil {
        fmt.Println(err)
    }
fmt.Println("val = ", val)

//in terminal
//val = {  }

需要取的值是<name>and <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"`
}

并设法得到这个

    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

是否有任何其他解决方案可以直接将 rawXML 数据放入第一个结构中?还是我们需要像我一样分两步解析它?

标签: gostruct

解决方案


推荐阅读