Implement RemoveAttr method
diff --git a/etree.go b/etree.go
index 7380bda..981e9ec 100644
--- a/etree.go
+++ b/etree.go
@@ -523,6 +523,18 @@
return &e.Attr[len(e.Attr)-1]
}
+// RemoveElement removes the given attribute. If an equal attribute does not
+// exist, nil is returned.
+func (e *Element) RemoveAttr(attr *Attr) *Attr {
+ for i, a := range e.Attr {
+ if a == *attr {
+ e.Attr = append(e.Attr[0:i], e.Attr[i+1:]...)
+ return attr
+ }
+ }
+ return nil
+}
+
// writeTo serializes the attribute to the writer.
func (a *Attr) writeTo(w *bufio.Writer) {
if a.Space != "" {
diff --git a/etree_test.go b/etree_test.go
index 0e3b80c..3674fd4 100644
--- a/etree_test.go
+++ b/etree_test.go
@@ -20,7 +20,7 @@
store.CreateComment("This is a comment")
book := store.CreateElement("book")
book.CreateAttrFull("", "lang", "fr")
- book.CreateAttr("lang", "en")
+ lang := book.CreateAttr("lang", "en")
title := book.CreateElementFull("t", "title")
title.SetText("Nicholas Nickleby")
title.SetText("Great Expectations")
@@ -97,6 +97,14 @@
if book.SelectAttrValueFull("t", "missing", "unknown") != "unknown" {
t.Fail()
}
+ attr = book.RemoveAttr(lang)
+ if attr != lang {
+ t.Fail()
+ }
+ attr = book.SelectAttr("lang")
+ if attr != nil {
+ t.Fail()
+ }
element = book.SelectElementFull("t", "title")
if element != title || element.Text() != "Great Expectations" || len(element.Attr) != 0 {
t.Fail()