質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.35%
Go

Go(golang)は、Googleで開発されたオープンソースのプログラミング言語です。

XMLパーサ

XML文書のテキストデータだけを抜き出して、アプリケーションソフトが利用しやすい形式に変換させるソフトウェアをXMLパーサと呼びます。

パース

パースとは、一定の文法に従って記述されたテキスト文書を解析し、データ構造の集合体に分解・変換することを呼びます。

Q&A

解決済

1回答

2208閲覧

Go言語のXMLのパースの方法

akgfff5

総合スコア1

Go

Go(golang)は、Googleで開発されたオープンソースのプログラミング言語です。

XMLパーサ

XML文書のテキストデータだけを抜き出して、アプリケーションソフトが利用しやすい形式に変換させるソフトウェアをXMLパーサと呼びます。

パース

パースとは、一定の文法に従って記述されたテキスト文書を解析し、データ構造の集合体に分解・変換することを呼びます。

0グッド

0クリップ

投稿2020/10/05 14:37

前提・実現したいこと

以下のようなxml形式のテキストをパースしたいです。

<resources> <string name="go1">Go1</string> <string name="go2">Go2</string> <string name="go3">Go3</string> <string name="go4">Go4</string> <string name="go5">Go5</string> <string name="go6">Go6</string> </resources>`

以下の実装で行っているのですが、パースが行えません。
確実にstructの構造の設定の仕方が悪いと思うのですが、どのようにしたらよいでしょうか?

現在のstructの構造は以下の通りです

type String struct { Name string `xml:"string,attr"` Value string `xml:"string"` } type Resources struct { Data []String `xml:"string"` }

該当のソースコード

package main import ( "encoding/xml" "fmt" ) type String struct { Name string `xml:"string,attr"` Value string `xml:"string"` } type Resources struct { Data []String `xml:"string"` } func main() { xmlStr := ` <resources> <string name="go1">Go1</string> <string name="go2">Go2</string> <string name="go3">Go3</string> <string name="go4">Go4</string> <string name="go5">Go5</string> <string name="go6">Go6</string> </resources>` data := new(Resources) if err := xml.Unmarshal([]byte(xmlStr), data); err != nil { fmt.Println("XML Unmarshal error:", err) return } fmt.Println(data) }

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

structのタグは以下のようになるかと思います。

go

1package main 2 3import ( 4 "encoding/xml" 5 "fmt" 6) 7 8type String struct { 9 Name string `xml:"name,attr"` 10 Value string `xml:",chardata"` 11} 12 13type Resources struct { 14 Data []String `xml:"string"` 15} 16 17func main() { 18 19 xmlStr := ` 20<resources> 21 <string name="go1">Go1</string> 22 <string name="go2">Go2</string> 23 <string name="go3">Go3</string> 24 <string name="go4">Go4</string> 25 <string name="go5">Go5</string> 26 <string name="go6">Go6</string> 27</resources>` 28 29 data := new(Resources) 30 31 if err := xml.Unmarshal([]byte(xmlStr), data); err != nil { 32 fmt.Println("XML Unmarshal error:", err) 33 return 34 } 35 fmt.Println(data) 36 37} 38
  • 出力結果

bash

1&{[{go1 Go1} {go2 Go2} {go3 Go3} {go4 Go4} {go5 Go5} {go6 Go6}]}

https://play.golang.org/p/pGwJaTKtnZ3

投稿2020/10/05 22:46

d_tutuz

総合スコア730

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

akgfff5

2020/10/06 12:25

ありがとうございます!! 無事にパースを行えました
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.35%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問