diff options
author | Gustavo Niemeyer <gustavo@niemeyer.net> | 2012-02-22 23:37:57 -0200 |
---|---|---|
committer | Gustavo Niemeyer <gustavo@niemeyer.net> | 2012-02-22 23:37:57 -0200 |
commit | 133c6bf77fffcbfa38ed58cf06808b38bbc374e0 (patch) | |
tree | 8724037fc287cc53ad28278187770f7c13767f70 | |
parent | fea7f07e560b3a8dcc16c89f683eb907762fad6f (diff) | |
download | go-133c6bf77fffcbfa38ed58cf06808b38bbc374e0.tar.gz go-133c6bf77fffcbfa38ed58cf06808b38bbc374e0.zip |
encoding/xml: move Unmarshal example to function
This also fixes MarshalIndent's example after the
recent formatting convention changes.
Fixes #2831.
R=golang-dev, rsc
CC=golang-dev
https://golang.org/cl/5671062
-rw-r--r-- | src/pkg/encoding/xml/example_test.go | 73 | ||||
-rw-r--r-- | src/pkg/encoding/xml/read.go | 52 |
2 files changed, 63 insertions, 62 deletions
diff --git a/src/pkg/encoding/xml/example_test.go b/src/pkg/encoding/xml/example_test.go index 2f0c1747ce..6c5390766b 100644 --- a/src/pkg/encoding/xml/example_test.go +++ b/src/pkg/encoding/xml/example_test.go @@ -10,15 +10,6 @@ import ( "os" ) -// <person id="13"> -// <name> -// <first>John</first> -// <last>Doe</last> -// </name> -// <age>42</age> -// <Married>false</Married> -// <!-- Need more fields. --> -// </person> func ExampleMarshalIndent() { type Person struct { XMLName xml.Name `xml:"person"` @@ -34,10 +25,72 @@ func ExampleMarshalIndent() { v := &Person{Id: 13, FirstName: "John", LastName: "Doe", Age: 42} v.Comment = " Need more fields. " - output, err := xml.MarshalIndent(v, "\t", "\t") + output, err := xml.MarshalIndent(v, " ", " ") if err != nil { fmt.Printf("error: %v\n", err) } os.Stdout.Write(output) + // Output: + // <person id="13"> + // <name> + // <first>John</first> + // <last>Doe</last> + // </name> + // <age>42</age> + // <Married>false</Married> + // <!-- Need more fields. --> + // </person> +} + +// This example demonstrates unmarshaling an XML excerpt into a value with +// some preset fields. Note that the Phone field isn't modified and that +// the XML <address> element is ignored. Also, the Groups field is assigned +// considering the element path provided in its tag. +func ExampleUnmarshal() { + type Email struct { + Where string `xml:"where,attr"` + Addr string + } + type Result struct { + XMLName xml.Name `xml:"Person"` + Name string `xml:"FullName"` + Phone string + Email []Email + Groups []string `xml:"Group>Value"` + } + p := Result{Name: "none", Phone: "none"} + + data := ` + <Person> + <FullName>Grace R. Emlin</FullName> + <Email where="home"> + <Addr>gre@example.com</Addr> + </Email> + <Email where='work'> + <Addr>gre@work.com</Addr> + </Email> + <Group> + <Value>Friends</Value> + <Value>Squash</Value> + </Group> + <Address>123 Main Street</Address> + </Person> + ` + err := xml.Unmarshal([]byte(data), &p) + if err != nil { + fmt.Printf("error: %v", err) + return + } + fmt.Printf("XMLName: %#v\n", p.XMLName) + fmt.Printf("Name: %q\n", p.Name) + fmt.Printf("Phone: %q\n", p.Phone) + fmt.Printf("Email: %v\n", p.Email) + fmt.Printf("Groups: %v\n", p.Groups) + // Output: + // XMLName: xml.Name{Space:"", Local:"Person"} + // Name: "Grace R. Emlin" + // Phone: "none" + // Email: [{home gre@example.com} {work gre@work.com}] + // Groups: [Friends Squash] } diff --git a/src/pkg/encoding/xml/read.go b/src/pkg/encoding/xml/read.go index b5a3426a32..7f5601a7ad 100644 --- a/src/pkg/encoding/xml/read.go +++ b/src/pkg/encoding/xml/read.go @@ -25,58 +25,6 @@ import ( // slice, or string. Well-formed data that does not fit into v is // discarded. // -// For example, given these definitions: -// -// type Email struct { -// Where string `xml:",attr"` -// Addr string -// } -// -// type Result struct { -// XMLName xml.Name `xml:"result"` -// Name string -// Phone string -// Email []Email -// Groups []string `xml:"group>value"` -// } -// -// result := Result{Name: "name", Phone: "phone", Email: nil} -// -// unmarshalling the XML input -// -// <result> -// <email where="home"> -// <addr>gre@example.com</addr> -// </email> -// <email where='work'> -// <addr>gre@work.com</addr> -// </email> -// <name>Grace R. Emlin</name> -// <group> -// <value>Friends</value> -// <value>Squash</value> -// </group> -// <address>123 Main Street</address> -// </result> -// -// via Unmarshal(data, &result) is equivalent to assigning -// -// r = Result{ -// xml.Name{Local: "result"}, -// "Grace R. Emlin", // name -// "phone", // no phone given -// []Email{ -// Email{"home", "gre@example.com"}, -// Email{"work", "gre@work.com"}, -// }, -// []string{"Friends", "Squash"}, -// } -// -// Note that the field r.Phone has not been modified and -// that the XML <address> element was discarded. Also, the field -// Groups was assigned considering the element path provided in the -// field tag. -// // Because Unmarshal uses the reflect package, it can only assign // to exported (upper case) fields. Unmarshal uses a case-sensitive // comparison to match XML element names to tag values and struct |