Work on describing the detail XML format at a high level
[pspp] / parse-xml.c
index 2f6b33813eb43bc4aa050d3bee9fd415ff32ccf5..3a32ee36e2731b317fe6a083b77b4d0f23373e80 100644 (file)
@@ -159,6 +159,24 @@ print_attribute (xmlNode *node, const char *attr)
     }
 }
 
+static void
+print_element (xmlDoc *doc, xmlNode *node, const char *element)
+{
+  for (; node; node = node->next)
+    {
+      if (!strcmp(element, (char *) node->name))
+        {
+          xmlBuffer *buf = xmlBufferCreate();
+          xmlNodeDump (buf, doc, node, 0, 1);
+          xmlBufferDump (stdout, buf);
+          xmlBufferFree (buf);
+          putchar ('\n');
+        }
+
+      print_element (doc, node->children, element);
+    }
+}
+
 static __attribute__((unused)) xmlNode *
 find_page_setup (xmlNode *node)
 {
@@ -237,6 +255,8 @@ main (int argc, char **argv)
     print_cdata (root);
   else if (!strcmp(argv[2], "text"))
     print_text (root);
+  else if (!strncmp(argv[2], "element:", 8))
+    print_element (doc, root, argv[2] + 8);
   else if (!strncmp(argv[2], "attr:", 5))
     print_attribute (root, argv[2] + 5);
   else if (!strcmp(argv[2], "labels"))