Golang XML Unmarshal仅返回子节点的最后一个值

时间:2016-10-05 15:42:45

标签: xml go

我试图从下面的XML中提取一个简单的XML,但输出只返回Name的最后一个值

{{1}}

2 个答案:

答案 0 :(得分:0)

The Go Playground上试用:

include('https://ajax.googleapis.com/ajax/libs/jquery/3.1.1/jquery.min.js');

(function (window) {
  "use strict";

  var config = {
    urlPrefix: "",
    visitsUrl: "/ahoy/visits",
    eventsUrl: "/ahoy/events",
    cookieDomain: null,
    page: null,
    platform: "Web",
    useBeacon: false,
    startOnReady: true
  };

  var ahoy = window.ahoy || window.Ahoy || {};

  ahoy.configure = function (options) {
    for (var key in options) {
      if (options.hasOwnProperty(key)) {
        config[key] = options[key];
      }
    }
  };
.......

输出:

package main

import (
    "encoding/xml"
    "fmt"
)

type Member struct {
    Names []string `xml:"names>name"`
    Value string   `xml:"value>string"`
}

type Result struct {
    Members []Member `xml:"params>param>value>array>data>value>struct>member"`
}

func main() {
    data := `
    <methodResponse>
    <params>
        <param>
            <value>
                <array>
                    <data>
                        <value>
                            <string>12345abcde12345abcde12345</string>
                        </value>
                        <value>
                            <struct>
                                <member>
                                    <names>
                                     <name> 2 </name>
                                     <name> 3 </name>
                                     <name> 4 </name>
                                    </names>

                                    <value>
                                        <string>trex</string>
                                    </value>
                                </member>

                                <member>
                                    <names>
                                     <name> 2 </name>
                                     <name> 3 </name>
                                     <name> 4 </name>
                                    </names>

                                    <value>
                                        <string>trex</string>
                                    </value>
                                </member>
                           </struct>
                        </value>
                    </data>
                </array>
            </value>
        </param>
    </params>
</methodResponse>`

    v := Result{}
    err := xml.Unmarshal([]byte(data), &v)
    if err != nil {
        panic(err)
    }
    fmt.Println(v)
}

答案 1 :(得分:0)

我想通过将名称作为切片

来解决这个问题

名称[]字符串xml:"name"