Add optional support for HTML entities
diff --git a/CONTRIBUTORS b/CONTRIBUTORS
index 45a5395..03211a8 100644
--- a/CONTRIBUTORS
+++ b/CONTRIBUTORS
@@ -6,4 +6,5 @@
Michal Jemala (michaljemala)
Nicolas Piganeau (npiganeau)
Chris Brown (ccbrown)
-Earncef Sequeira (earncef)
\ No newline at end of file
+Earncef Sequeira (earncef)
+Gabriel de Labachelerie (wuzuf)
diff --git a/etree.go b/etree.go
index dd75456..4115016 100644
--- a/etree.go
+++ b/etree.go
@@ -34,6 +34,9 @@
// Permissive allows input containing common mistakes such as missing tags
// or attribute values. Default: false.
Permissive bool
+
+ // Entity to be passed to standard xml.Decoder. Default: nil.
+ Entity map[string]string
}
// newReadSettings creates a default ReadSettings record.
@@ -402,6 +405,7 @@
dec := xml.NewDecoder(r)
dec.CharsetReader = settings.CharsetReader
dec.Strict = !settings.Permissive
+ dec.Entity = settings.Entity
var stack stack
stack.push(e)
for {
diff --git a/etree_test.go b/etree_test.go
index 7343b77..0ca2b5e 100644
--- a/etree_test.go
+++ b/etree_test.go
@@ -5,6 +5,7 @@
package etree
import (
+ "encoding/xml"
"io"
"testing"
)
@@ -170,6 +171,27 @@
}
}
+func TestDocumentRead_HTMLEntities(t *testing.T) {
+ s := `<store>
+ <book lang="en">
+ <title>→ Great Expectations</title>
+ <author>Charles Dickens</author>
+ </book>
+</store>`
+
+ doc := NewDocument()
+ err := doc.ReadFromString(s)
+ if err == nil {
+ t.Fatal("etree: incorrect ReadFromString result")
+ }
+
+ doc.ReadSettings.Entity = xml.HTMLEntity
+ err = doc.ReadFromString(s)
+ if err != nil {
+ t.Fatal("etree: incorrect ReadFromString result")
+ }
+}
+
func TestEscapeCodes(t *testing.T) {
cases := []struct {
input string