parse-xml: Add ability to limit versions dumped.
authorBen Pfaff <blp@cs.stanford.edu>
Sun, 13 Mar 2016 20:52:22 +0000 (13:52 -0700)
committerBen Pfaff <blp@cs.stanford.edu>
Sun, 13 Mar 2016 20:52:22 +0000 (13:52 -0700)
parse-detail-xml
parse-xml.c

index 0eb3555a745404595e79c20fe4106e35db79a310..15a19341e596ce497eda47901a8b52deb8b5b633 100755 (executable)
@@ -4,6 +4,6 @@
 legacyXML=`ls -1 unzipped/*/*.xml |grep -vE 'outputViewer|stats|chart|model'`
 if test -n "$1"; then
     for d in $legacyXML; do
-       ./parse-xml $d $1
+       ./parse-xml $d "$@"
     done
 fi
index 70a7a89928617c8a854253f55d39586a6cf8ed16..4d352ce8d8cbfe0f03a400fe558c09e644d94a2b 100644 (file)
@@ -236,6 +236,21 @@ print_text (xmlNode *node)
     }
 }
 
+static void
+check_version (xmlNode *root, const char *version)
+{
+  const char *s = (char *) xmlGetProp (root, (xmlChar *) "version");
+  if (!s)
+    {
+      fprintf (stderr, "missing version\n");
+      exit (1);
+    }
+  else if (strcmp(version, s))
+    {
+      exit (0);
+    }
+}
+
 static void
 usage (void)
 {
@@ -246,7 +261,7 @@ usage (void)
 int
 main (int argc, char **argv)
 {
-  if (argc != 3)
+  if (argc < 3)
     usage ();
 
   LIBXML_TEST_VERSION;
@@ -268,26 +283,31 @@ main (int argc, char **argv)
   root->next = NULL;
 #endif
 
-  if (!strcmp(argv[2], "parents"))
-    print_parents (root);
-  else if (!strcmp(argv[2], "containment"))
-    print_containment (root);
-  else if (!strcmp(argv[2], "attributes"))
-    print_attributes (root);
-  else if (!strcmp(argv[2], "cdata"))
-    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 (!strncmp(argv[2], "id:", 3))
-    print_id (doc, root, argv[2] + 3);
-  else if (!strcmp(argv[2], "labels"))
-    print_labels (root);
-  else
-    usage ();
+  for (int i = 2; i < argc; i++)
+    {
+      if (!strcmp(argv[i], "parents"))
+        print_parents (root);
+      else if (!strcmp(argv[i], "containment"))
+        print_containment (root);
+      else if (!strcmp(argv[i], "attributes"))
+        print_attributes (root);
+      else if (!strcmp(argv[i], "cdata"))
+        print_cdata (root);
+      else if (!strcmp(argv[i], "text"))
+        print_text (root);
+      else if (!strncmp(argv[i], "element:", 8))
+        print_element (doc, root, argv[i] + 8);
+      else if (!strncmp(argv[i], "attr:", 5))
+        print_attribute (root, argv[i] + 5);
+      else if (!strncmp(argv[i], "id:", 3))
+        print_id (doc, root, argv[i] + 3);
+      else if (!strcmp(argv[i], "labels"))
+        print_labels (root);
+      else if (!strncmp(argv[i], "version=", 8))
+        check_version (root, argv[i] + 8);
+      else
+        usage ();
+    }
 
   xmlFreeDoc(doc);
   xmlCleanupParser();