From 4a3e000a48fdfe4cbcfe8970db9c1ebec9c4b89d Mon Sep 17 00:00:00 2001 From: Roger Peppe Date: Fri, 24 Apr 2015 17:20:21 +0100 Subject: [PATCH] encoding/xml: do not escape newlines There is no need to escape newlines in char data - it makes the XML larger and harder to read. Change-Id: I1c1fcee1bdffc705c7428f89ca90af8085d6fb73 Reviewed-on: https://go-review.googlesource.com/9310 Reviewed-by: Nigel Tao Reviewed-by: Russ Cox --- src/encoding/xml/marshal.go | 2 +- src/encoding/xml/marshal_test.go | 2 +- src/encoding/xml/xml.go | 10 ++++++++++ 3 files changed, 12 insertions(+), 2 deletions(-) diff --git a/src/encoding/xml/marshal.go b/src/encoding/xml/marshal.go index a0e2058d89..d0899c0fa6 100644 --- a/src/encoding/xml/marshal.go +++ b/src/encoding/xml/marshal.go @@ -209,7 +209,7 @@ func (enc *Encoder) EncodeToken(t Token) error { return err } case CharData: - EscapeText(p, t) + escapeText(p, t, false) case Comment: if bytes.Contains(t, endComment) { return fmt.Errorf("xml: EncodeToken of Comment containing --> marker") diff --git a/src/encoding/xml/marshal_test.go b/src/encoding/xml/marshal_test.go index 8362421db7..5e9718c20c 100644 --- a/src/encoding/xml/marshal_test.go +++ b/src/encoding/xml/marshal_test.go @@ -1297,7 +1297,7 @@ var encodeTokenTests = []struct { toks: []Token{ CharData(" \t\n"), }, - want: ` `, + want: " \n", }, { desc: "comment", toks: []Token{ diff --git a/src/encoding/xml/xml.go b/src/encoding/xml/xml.go index 0c64cd730d..00792c4f27 100644 --- a/src/encoding/xml/xml.go +++ b/src/encoding/xml/xml.go @@ -1863,6 +1863,13 @@ var ( // EscapeText writes to w the properly escaped XML equivalent // of the plain text data s. func EscapeText(w io.Writer, s []byte) error { + return escapeText(w, s, true) +} + +// escapeText writes to w the properly escaped XML equivalent +// of the plain text data s. If escapeNewline is true, newline +// characters will be escaped. +func escapeText(w io.Writer, s []byte, escapeNewline bool) error { var esc []byte last := 0 for i := 0; i < len(s); { @@ -1882,6 +1889,9 @@ func EscapeText(w io.Writer, s []byte) error { case '\t': esc = esc_tab case '\n': + if !escapeNewline { + continue + } esc = esc_nl case '\r': esc = esc_cr -- 2.48.1