2016-10-05 2 views
0

Я пытаюсь извлечь простой XML из сильфона XML, но выход только возвращает последнее значение имениGolang XML распаковать только возвращает последнее значение дочернего узла

package main 

import (
    "encoding/xml" 
    "fmt" 
) 

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

type Names struct { 
    Name string `xml:"name"` 
} 

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 { 
     fmt.Printf("error: %v", err) 
     return 
    } 
    fmt.Println(v) 
} 

ответ

0

Попробуйте на The Go Playground:

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) 
} 

выход:

{[{[ 2 3 4 ] trex} {[ 2 3 4 ] trex}]} 
+1

Привет, это работает как шарм и легко – Chali

0

Я понял это, по маркам Имя как срез

Название [] string xml:"name"

Смежные вопросы