Don't flush the XML printing buffer if nothing was printed.
[SXSI/xpathcomp.git] / src / nodeSet.ml
index ad3768b..0828029 100644 (file)
@@ -100,11 +100,18 @@ module Mat : S with type t = Tree.node mat =
     let conscat4 e l1 l2 l3 l4 = conscat e l1 (concat l2 (concat l3 l4))
 
     let subtree_tags tree node tag =
-      { clist = SubtreeTags(tree, node, tag);
-       length = Tree.subtree_tags tree node tag }
+      let len = Tree.subtree_tags tree node tag in
+      if len == 0 then empty
+      else
+       { clist = SubtreeTags(tree, node, tag);
+         length = len }
+
     let subtree_elements tree node =
-      { clist = SubtreeElts(tree, node);
-       length = Tree.subtree_elements tree node }
+      let len = Tree.subtree_elements tree node in
+      if len == 0 then empty
+      else
+       { clist = SubtreeElts(tree, node);
+         length = len }
 
     let fst_tagged tree t tag =
       if Tree.tag tree t == tag then t
@@ -192,8 +199,12 @@ module Mat : S with type t = Tree.node mat =
          Unix.openfile name [ Unix.O_WRONLY; Unix.O_TRUNC; Unix.O_CREAT ] 0o666,
          Unix.close
       in
-      iter (fun node -> Tree.print_xml v node fd) l;
-      Tree.flush v fd;
+      ignore (Unix.write fd "<xml_result>\n" 0 13);
+      if l.length > 0 then begin
+       iter (fun node -> Tree.print_xml v node fd) l;
+       Tree.flush v fd;
+      end;
+      ignore (Unix.write fd "</xml_result>\n" 0 14);
       finish fd
 
   end