aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGustavo Niemeyer <gustavo@niemeyer.net>2012-02-22 23:37:57 -0200
committerGustavo Niemeyer <gustavo@niemeyer.net>2012-02-22 23:37:57 -0200
commit133c6bf77fffcbfa38ed58cf06808b38bbc374e0 (patch)
tree8724037fc287cc53ad28278187770f7c13767f70
parentfea7f07e560b3a8dcc16c89f683eb907762fad6f (diff)
downloadgo-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.go73
-rw-r--r--src/pkg/encoding/xml/read.go52
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