diff --git a/lib/pure/xmltree.nim b/lib/pure/xmltree.nim
index 2564c4465cb3..1c7e5bce84ad 100644
--- a/lib/pure/xmltree.nim
+++ b/lib/pure/xmltree.nim
@@ -360,6 +360,35 @@ proc `[]`* (n: var XmlNode, i: int): var XmlNode {.inline.} =
assert n.k == xnElement
result = n.s[i]
+proc clear*(n: var XmlNode) =
+ ## Recursively clear all children of an XmlNode.
+ runnableExamples:
+ from strutils import unindent
+
+ var g = newElement("myTag")
+ g.add newText("some text")
+ g.add newComment("this is comment")
+
+ var h = newElement("secondTag")
+ h.add newEntity("some entity")
+
+ let att = {"key1": "first value", "key2": "second value"}.toXmlAttributes
+ var k = newXmlTree("treeTag", [g, h], att)
+
+ assert ($k).unindent ==
+ """
+ some text
+ &some entity;
+ """.unindent
+ clear(k)
+ assert $k == """"""
+
+ for i in 0 ..< n.len:
+ clear(n[i])
+ if n.k == xnElement:
+ n.s.setLen(0)
+
+
iterator items*(n: XmlNode): XmlNode {.inline.} =
## Iterates over any child of `n`.
##