5

XML コードを出力するスクリプトがありますが、新しい XML ファイルを作成し、出力する代わりに XML コードをファイルに書き込む必要があります。

XMLコードを出力する関数は次のとおりです

func processTopic(id string, properties map[string][]string) {
    fmt.Printf("<card entity=\"%s\">\n", id)
    fmt.Println("  <facts>")
    for k, v := range properties {
        for _,value := range v {
            fmt.Printf("    <fact property=\"%s\">%s</fact>\n", k, value)
        }
    }
    fmt.Println("  </facts>")
    fmt.Println("</card>")
}

XML ファイルを作成してから、その XML ファイルにコードを書き込むにはどうすればよいですか?

4

4 に答える 4

19

XML を印刷することは問題ないかもしれませんが、encoding/xmlパッケージを使用してみませんか? XML 構造を作成します。

type Card struct {
    Entity string `xml:"entity,attr"`
    Facts  Facts
}

type Facts struct {
    Fact []Fact
}

type Fact struct {
    Property string `xml:"property,attr"`
    Value string `xml:",innerxml"`
}

次のようなデータ構造を作成します ( play で例を実行します):

card := &Card{
    Entity: "1234id",
    Facts: Facts{[]Fact{
        Fact{Property: "prop1", Value: "val1"},
        Fact{Property: "prop2", Value: "val2"},
    }},
}

これで、構造を XML にエンコードして、次のように直接書き込むことができますio.Writer

writer, err := os.Open("/tmp/tmp.xml")

encoder := xml.NewEncoder(writer)
err := encoder.Encode(data)

if err != nil { panic(err) }
于 2013-10-09T00:14:11.540 に答える