diff --git a/node.go b/node.go index b451e15..85e4542 100644 --- a/node.go +++ b/node.go @@ -27,7 +27,7 @@ var IndentPrefix = "" type Attr struct { Name xml.Name // Attribute namespace and name. - Value string // Attribute value. + Value string // Attribute value. } type Node struct { @@ -395,6 +395,40 @@ func rec_SelectNodes(cn *Node, namespace, name string, list *[]*Node, recurse bo } } +func (this *Node) RemoveNameSpace() { + this.Name.Space = "" + // this.RemoveAttr("xmlns") //This is questionable + + for _, v := range this.Children { + v.RemoveNameSpace() + } +} + +func (this *Node) RemoveAttr(name string) { + for i, v := range this.Attributes { + if name == v.Name.Local { + //Delete it + this.Attributes = append(this.Attributes[:i], this.Attributes[i+1:]...) + } + } +} + +func (this *Node) SetAttr(name, value string) { + for _, v := range this.Attributes { + if name == v.Name.Local { + v.Value = value + return + } + } + //Add + attr := new(Attr) + attr.Name.Local = name + attr.Name.Space = "" + attr.Value = value + this.Attributes = append(this.Attributes, attr) + return +} + // Convert node to appropriate []byte representation based on it's @Type. // Note that NT_ROOT is a special-case empty node used as the root for a // Document. This one has no representation by itself. It merely forwards the