stream.go
changeset 114 a058e33c1666
parent 113 bee6cc131798
child 116 5c6d6d51d3ba
--- a/stream.go	Sun Dec 16 23:06:54 2012 -0700
+++ b/stream.go	Fri Dec 28 17:07:20 2012 -0700
@@ -87,9 +87,13 @@
 	}
 	defer close(ch)
 
-	p := xml.NewDecoder(r)
-	p.Context.Map[""] = NsClient
-	p.Context.Map["stream"] = NsStream
+	// This trick loads our namespaces into the parser.
+	nsstr := fmt.Sprintf(`<a xmlns="%s" xmlns:stream="%s">`,
+		NsClient, NsStream)
+	nsrdr := strings.NewReader(nsstr)
+	p := xml.NewDecoder(io.MultiReader(nsrdr, r))
+	p.Token()
+
 Loop:
 	for {
 		// Sniff the next token on the stream.
@@ -206,8 +210,6 @@
 	}(w)
 
 	enc := xml.NewEncoder(w)
-	enc.Context.Map[NsClient] = ""
-	enc.Context.Map[NsStream] = "stream"
 
 	for obj := range ch {
 		if st, ok := obj.(*stream); ok {