doukang2003 2012-09-17 00:33
浏览 48
已采纳

Go中具有嵌套XML-RPC的非编组

I'm using Webfaction API and trying to unmarshal their response to obtain the session ID (12345abcde... below).

How do I access the specific value when its nested under several fields (namely, params>param)?

Code below is at http://play.golang.org/p/krG4_fXVka

package main

import ("encoding/xml"
        "fmt"
        )

type Result struct {
        XMLName xml.Name `xml:"methodResponse"`
        Values []string `xml:"params>param>value"`
}

func main() {
data := `
    <methodResponse>
<params>
    <param>
        <value><array><data>
            <value><string>12345abcde12345abcde12345</string></value>
            <value><struct>
                <member>
                    <name>username</name>
                    <value><string>trex</string></value>
                </member>
                <member>
                    <name>home</name>
                    <value><string>/home</string></value>
                </member>
                <member>
                    <name>mail_server</name>
                    <value><string>Mailbox1</string></value>
                </member>
                <member>
                    <name>web_server</name>
                    <value><string>Web12</string></value>
                </member>
                <member>
                    <name>id</name>
                    <value><int>1234</int></value>
                </member>
            </struct></value>
        </data></array></value>
    </param>
</params>

`

v := Result{}
err := xml.Unmarshal([]byte(data), &v)
if err != nil {
fmt.Printf("error: %v", err)
        return
}
fmt.Printf("XMLName: %#v
", v.XMLName)
fmt.Printf("Values: %#v
", v.Values)

}
  • 写回答

1条回答 默认 最新

  • douyaosi3164 2012-09-17 03:10
    关注

    Not 100% clear on what you're trying to do, but this seems to break it down better?

    type Member struct {
        Name string `xml:"name"`
        Value string `xml:"value>string"`
    }
    
    type Result struct {
            XMLName xml.Name `xml:"methodResponse"`
            FirstValue string `xml:"params>param>value>array>data>value>string"`
            Members []Member `xml:"params>param>value>array>data>value>struct>member"`
    }
    

    Note that the structure your parsing has a fairly insane level of depth. Might help to run the XML through a pretty printer that formats it for you with indent to see.

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

悬赏问题

  • ¥15 PADS Logic 原理图
  • ¥15 PADS Logic 图标
  • ¥15 电脑和power bi环境都是英文如何将日期层次结构转换成英文
  • ¥20 气象站点数据求取中~
  • ¥15 如何获取APP内弹出的网址链接
  • ¥15 wifi 图标不见了 不知道怎么办 上不了网 变成小地球了
  • ¥50 STM32单片机传感器读取错误
  • ¥15 (关键词-阻抗匹配,HFSS,RFID标签天线)
  • ¥15 机器人轨迹规划相关问题
  • ¥15 word样式右侧翻页键消失