summary refs log tree commit diff stats
path: root/lib
diff options
context:
space:
mode:
Diffstat (limited to 'lib')
-rw-r--r--lib/pure/xmltree.nim29
1 files changed, 29 insertions, 0 deletions
diff --git a/lib/pure/xmltree.nim b/lib/pure/xmltree.nim
index 2564c4465..1c7e5bce8 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 ==
+      """<treeTag key2="second value" key1="first value">
+         <myTag>some text<!-- this is comment --></myTag>
+         <secondTag>&some entity;</secondTag>
+         </treeTag>""".unindent
+    clear(k)
+    assert $k == """<treeTag key2="second value" key1="first value" />"""
+
+  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`.
   ##