2016-08-05 4 views
2

以下のXMLのアンマーシャリングで問題が発生しました。<info>ノードがtype="Genres"のノードにあり、その値を[]Genreに保存するにはどうすればよいですか?Goを使用したXMLのアンマーシャリング:同じ値を持つ属性の検索方法

<manga id="4199" type="manga" name="Jinki: Extend" precision="manga"> 
    <info type="Main title" lang="EN">Jinki: Extend</info> 
    <info type="Genres">action</info> 
    <info type="Genres">science fiction</info> 
    <info type="Themes">mecha</info> 
    <info type="Number of tankoubon">9</info> 
    <info type="Number of pages">186</info> 
</manga> 

私はこれらに類似の構造体に値を格納するために探しています:

// Manga struct 
type Manga struct { 
    WorkID int  `xml:"id,attr"` 
    Name  string `xml:"name,attr"` 
    Precision string `xml:"precision,attr"` 
    Genres []Genre `[this is the part I need help on]` 
} 

// Genre struct 
type Genre struct { 
    Value string 
} 

私はあなたたちを願って、私はXMLが理想的ではないですけど、それは私が仕事をしなければならないものですこれで私を助けることができます。

ありがとうございます。

答えて

3

<manga><info>要素のリストが含まれているので、それはむしろ、様々なタイプに<info>要素を翻訳しようとするよりも、Info構造体のリストを持っているより多くの意味があります。 XMLは非常に大規模な、私はちょうどユーティリティを記述しないではありません場合は

{ 
    "WorkID": 4199, 
    "Name": "Jinki: Extend", 
    "Precision": "manga", 
    "Info": [ 
    { 
     "Type": "Main title", 
     "Value": "Jinki: Extend" 
    }, 
    { 
     "Type": "Genres", 
     "Value": "action" 
    }, 
    { 
     "Type": "Genres", 
     "Value": "science fiction" 
    }, 
    { 
     "Type": "Themes", 
     "Value": "mecha" 
    }, 
    { 
     "Type": "Number of tankoubon", 
     "Value": "9" 
    }, 
    { 
     "Type": "Number of pages", 
     "Value": "186" 
    } 
    ] 
} 
0

:のように見えます(便宜上JSONエンコードされた)

type Manga struct { 
    WorkID int `xml:"id,attr"` 
    Name  string `xml:"name,attr"` 
    Precision string `xml:"precision,attr"` 
    Info  []Info `xml:"info"` 
} 

type Info struct { 
    Type string `xml:"type,attr"` 
    Value string `xml:",chardata"` 
} 

出力:私のようなデータ構造を定義します以下のような機能:

type Manga struct { 
    WorkID int `xml:"id,attr"` 
    Name  string `xml:"name,attr"` 
    Precision string `xml:"precision,attr"` 
    Info  []Info `xml:"info"` 
} 

type Info struct { 
    Type string `xml:"type,attr"` 
    Data string `xml:",chardata"` 
} 

func (m *Manga) Genres() []Info { 
    var g []Info 

    for _, v := range m.Info { 
     if v.Type == "Genres" { 
      g = append(g, v) 
     } 
    } 
    return g 

} 

は、アクションでそれを参照してください:https://play.golang.org/p/bebUwwbSwG

関連する問題