Document all the elements, plus the attributes of heading.
[pspp] / parse-xml.c
index 85fbaf05feee574064ef5c8ccedcbc7d3297d98c..ad1b41833d2908b4b4714cdfc8bd8342a058b782 100644 (file)
@@ -67,7 +67,7 @@ print_attributes (xmlNode * a_node)
 {
   for (xmlNode *node = a_node; node; node = node->next)
     {
-      if (node->properties)
+      if (node->properties && node->parent->type != XML_DOCUMENT_NODE)
         {
           printf ("%s", node->name);
           for (xmlAttr *attr = node->properties; attr; attr = attr->next)
@@ -79,6 +79,19 @@ print_attributes (xmlNode * a_node)
     }
 }
 
+static void
+print_attribute (xmlNode *node, const char *attr)
+{
+  for (; node; node = node->next)
+    {
+      const char *s = (char *) xmlGetProp (node, (xmlChar *) attr);
+      if (s)
+        puts (s);
+
+      print_attribute (node->children, attr);
+    }
+}
+
 static void
 usage (void)
 {
@@ -107,6 +120,8 @@ main (int argc, char **argv)
     print_containment (root);
   else if (!strcmp(argv[2], "attributes"))
     print_attributes (root);
+  else if (!strncmp(argv[2], "attr:", 5))
+    print_attribute (root, argv[2] + 5);
   else if (!strcmp(argv[2], "labels"))
     print_labels (root);
   else