私は完全なMusicXMLファイルを読み込んで編集し、新しいファイルを書き出すことができるプログラムを作成しています。私はxml.Decodeを使ってMusicXMLファイルの構造体にデータを読み込んでいますが、実行すると何も起こらないようです。デコードオブジェクトを画面に印刷しようとしましたが、バイトでいっぱいの構造体を印刷しました。ゴランデコードMusicXML
xmlパッケージのページを見てきましたが、デコード機能をカバーするスレッドが見つからないようです。私は見つけたポインタのいくつかに応じてUnMarshallを使ってみましたが、うまくいきませんでした(これらのスレッドの大部分は古いので、UnMarshallはデコードが実装されて以来少し違って動作します)。
ここで入力機能があります:私は非常に任意の洞察力に感謝
type Score struct {
Work Work `xml:"work"`
Identification Identification `xml:"identification"`
Defaults Defaults `xml:"defaults"`
Credit Credit `xml:"credit"`
Partlist []Scorepart `xml:"score-part"`
Part []Part `xml:"part"`
}
// Name and other idenfication
type Work struct {
Number string `xml:"work-number"`
Title string `xml:"work-title"`
}
type Identification struct {
Type string `xml:"type,attr"`
Creator string `xml:"creator"`
Software string `xml:"software"`
Date string `xml:"encoding-date"`
Supports []Supports `xml:"supports"`
Source string `xml:"source"`
}
:
func ImportXML(infile string) *xml.Decoder {
// Reads music xml file to memory
f, err := os.Open(infile)
if err != nil {
fmt.Fprintf(os.Stderr, "Error opening music xml file: %v\n", err)
os.Exit(1)
}
defer f.Close()
fmt.Println("\n\tReading musicXML file...")
song := xml.NewDecoder(io.Reader(f))
// must pass an interface pointer to Decode
err = song.Decode(&Score{})
if err != nil {
fmt.Fprintf(os.Stderr, "Error assigning musicXML file to struct: %v\n", err)
os.Exit(1)
}
return song
}
は、ここで最初の数の構造体(残りは同じフォーマットに従う)です。
本当に正しいですか?もちろん、それは非常に痛いほど明白な何かに持っていた。助けてくれてありがとう! –