diff --git a/include/osmocom/vty/command.h b/include/osmocom/vty/command.h
index d63dbde..88490f7 100644
--- a/include/osmocom/vty/command.h
+++ b/include/osmocom/vty/command.h
@@ -401,4 +401,6 @@
 
 extern void *tall_vty_cmd_ctx;
 
+int vty_dump_xml_ref(FILE *stream);
+
 /*! @} */
diff --git a/src/vty/command.c b/src/vty/command.c
index daee5c5..9b32d22 100644
--- a/src/vty/command.c
+++ b/src/vty/command.c
@@ -619,15 +619,17 @@
 	return out;
 }
 
+typedef int (*print_func_t)(void *data, const char *fmt, ...);
+
 /*
- * Write one cmd_element as XML to the given VTY.
+ * Write one cmd_element as XML via a print_func_t.
  */
-static int vty_dump_element(struct cmd_element *cmd, struct vty *vty)
+static int vty_dump_element(struct cmd_element *cmd, print_func_t print_func, void *data, const char *newline)
 {
 	char *xml_string = xml_escape(cmd->string);
 
-	vty_out(vty, "    <command id='%s'>%s", xml_string, VTY_NEWLINE);
-	vty_out(vty, "      <params>%s", VTY_NEWLINE);
+	print_func(data, "    <command id='%s'>%s", xml_string, newline);
+	print_func(data, "      <params>%s", newline);
 
 	int j;
 	for (j = 0; j < vector_count(cmd->strvec); ++j) {
@@ -641,15 +643,15 @@
 
 			xml_param = xml_escape(desc->cmd);
 			xml_doc = xml_escape(desc->str);
-			vty_out(vty, "        <param name='%s' doc='%s' />%s",
-				xml_param, xml_doc, VTY_NEWLINE);
+			print_func(data, "        <param name='%s' doc='%s' />%s",
+				xml_param, xml_doc, newline);
 			talloc_free(xml_param);
 			talloc_free(xml_doc);
 		}
 	}
 
-	vty_out(vty, "      </params>%s", VTY_NEWLINE);
-	vty_out(vty, "    </command>%s", VTY_NEWLINE);
+	print_func(data, "      </params>%s", newline);
+	print_func(data, "    </command>%s", newline);
 
 	talloc_free(xml_string);
 	return 0;
@@ -658,20 +660,20 @@
 static bool vty_command_is_common(struct cmd_element *cmd);
 
 /*
- * Dump all nodes and commands associated with a given node as XML to the VTY.
+ * Dump all nodes and commands associated with a given node as XML via a print_func_t.
  */
-static int vty_dump_nodes(struct vty *vty)
+static int vty_dump_nodes(print_func_t print_func, void *data, const char *newline)
 {
 	int i, j;
 	int same_name_count;
 
-	vty_out(vty, "<vtydoc xmlns='urn:osmocom:xml:libosmocore:vty:doc:1.0'>%s", VTY_NEWLINE);
+	print_func(data, "<vtydoc xmlns='urn:osmocom:xml:libosmocore:vty:doc:1.0'>%s", newline);
 
 	/* Only once, list all common node commands. Use the CONFIG node to find common node commands. */
-	vty_out(vty, "  <node id='_common_cmds_'>%s", VTY_NEWLINE);
-	vty_out(vty, "    <name>Common Commands</name>%s", VTY_NEWLINE);
-	vty_out(vty, "    <description>These commands are available on all VTY nodes. They are listed"
-		" here only once, to unclutter the VTY reference.</description>%s", VTY_NEWLINE);
+	print_func(data, "  <node id='_common_cmds_'>%s", newline);
+	print_func(data, "    <name>Common Commands</name>%s", newline);
+	print_func(data, "    <description>These commands are available on all VTY nodes. They are listed"
+		" here only once, to unclutter the VTY reference.</description>%s", newline);
 	for (i = 0; i < vector_active(cmdvec); ++i) {
 		struct cmd_node *cnode;
 		cnode = vector_slot(cmdvec, i);
@@ -686,10 +688,10 @@
 			if (!vty_command_is_common(elem))
 				continue;
 			if (!(elem->attr & (CMD_ATTR_DEPRECATED | CMD_ATTR_HIDDEN)))
-				vty_dump_element(elem, vty);
+				vty_dump_element(elem, print_func, data, newline);
 		}
 	}
-	vty_out(vty, "  </node>%s", VTY_NEWLINE);
+	print_func(data, "  </node>%s", newline);
 
 	for (i = 0; i < vector_active(cmdvec); ++i) {
 		struct cmd_node *cnode;
@@ -712,11 +714,11 @@
 				same_name_count ++;
 		}
 
-		vty_out(vty, "  <node id='%s", cnode->name);
+		print_func(data, "  <node id='%s", cnode->name);
 		if (same_name_count > 1 || !*cnode->name)
-			vty_out(vty, "_%d", same_name_count);
-		vty_out(vty, "'>%s", VTY_NEWLINE);
-		vty_out(vty, "    <name>%s</name>%s", cnode->name, VTY_NEWLINE);
+			print_func(data, "_%d", same_name_count);
+		print_func(data, "'>%s", newline);
+		print_func(data, "    <name>%s</name>%s", cnode->name, newline);
 
 		for (j = 0; j < vector_active(cnode->cmd_vector); ++j) {
 			struct cmd_element *elem;
@@ -724,17 +726,50 @@
 			if (vty_command_is_common(elem))
 				continue;
 			if (!(elem->attr & (CMD_ATTR_DEPRECATED | CMD_ATTR_HIDDEN)))
-				vty_dump_element(elem, vty);
+				vty_dump_element(elem, print_func, data, newline);
 		}
 
-		vty_out(vty, "  </node>%s", VTY_NEWLINE);
+		print_func(data, "  </node>%s", newline);
 	}
 
-	vty_out(vty, "</vtydoc>%s", VTY_NEWLINE);
+	print_func(data, "</vtydoc>%s", newline);
 
 	return 0;
 }
 
+static int print_func_vty(void *data, const char *format, ...)
+{
+	struct vty *vty = data;
+	va_list args;
+	int rc;
+	va_start(args, format);
+	rc = vty_out_va(vty, format, args);
+	va_end(args);
+	return rc;
+}
+
+static int vty_dump_xml_ref_to_vty(struct vty *vty)
+{
+	return vty_dump_nodes(print_func_vty, vty, VTY_NEWLINE);
+}
+
+static int print_func_stream(void *data, const char *format, ...)
+{
+	va_list args;
+	int rc;
+	va_start(args, format);
+	rc = vfprintf((FILE*)data, format, args);
+	va_end(args);
+	return rc;
+}
+
+/*! Print the XML reference of all VTY nodes to the given stream.
+ */
+int vty_dump_xml_ref(FILE *stream)
+{
+	return vty_dump_nodes(print_func_stream, stream, "\n");
+}
+
 /* Check if a command with given string exists at given node */
 static int check_element_exists(struct cmd_node *cnode, const char *cmdstring)
 {
@@ -2772,7 +2807,7 @@
 DEFUN(show_online_help,
       show_online_help_cmd, "show online-help", SHOW_STR "Online help\n")
 {
-	vty_dump_nodes(vty);
+	vty_dump_xml_ref_to_vty(vty);
 	return CMD_SUCCESS;
 }
 
