Document a lot of setCellProperties.
[pspp] / parse-xml.c
index 9cf6694f91a008f64fef9f1a1dcb37192da289fb..70a7a89928617c8a854253f55d39586a6cf8ed16 100644 (file)
@@ -159,21 +159,44 @@ print_attribute (xmlNode *node, const char *attr)
     }
 }
 
+static void
+print_xml (xmlDoc *doc, xmlNode *node)
+{
+  xmlBuffer *buf = xmlBufferCreate();
+  xmlNodeDump (buf, doc, node, 0, 1);
+  xmlBufferDump (stdout, buf);
+  xmlBufferFree (buf);
+  putchar ('\n');
+}
+
 static void
 print_element (xmlDoc *doc, xmlNode *node, const char *element)
 {
   for (; node; node = node->next)
     {
       if (node->name && !strcmp(element, (char *) node->name))
+        print_xml (doc, node);
+
+      print_element (doc, node->children, element);
+    }
+}
+
+static void
+print_id (xmlDoc *doc, xmlNode *node, const char *id)
+{
+  for (; node; node = node->next)
+    {
+      if (node->type == XML_ELEMENT_NODE)
         {
-          xmlBuffer *buf = xmlBufferCreate();
-          xmlNodeDump (buf, doc, node, 0, 1);
-          xmlBufferDump (stdout, buf);
-          xmlBufferFree (buf);
-          putchar ('\n');
+          const char *node_id = (char *) xmlGetProp (node, (xmlChar *) "id");
+          if (node_id && !strcmp (node_id, id))
+            {
+              print_xml (doc, node);
+              break;
+            }
         }
 
-      print_element (doc, node->children, element);
+      print_id (doc, node->children, id);
     }
 }
 
@@ -259,6 +282,8 @@ main (int argc, char **argv)
     print_element (doc, root, argv[2] + 8);
   else if (!strncmp(argv[2], "attr:", 5))
     print_attribute (root, argv[2] + 5);
+  else if (!strncmp(argv[2], "id:", 3))
+    print_id (doc, root, argv[2] + 3);
   else if (!strcmp(argv[2], "labels"))
     print_labels (root);
   else