From af2be89cc013159b9f339e12fb107a9087f9540e Mon Sep 17 00:00:00 2001 From: Ben Pfaff Date: Mon, 17 Jul 2017 15:29:06 -0700 Subject: [PATCH] parse-xml: New features root: and musthave:. --- parse-xml.c | 27 ++++++++++++++++----------- 1 file changed, 16 insertions(+), 11 deletions(-) diff --git a/parse-xml.c b/parse-xml.c index d8726abcce..15c4ba2e9b 100644 --- a/parse-xml.c +++ b/parse-xml.c @@ -205,14 +205,14 @@ print_id (xmlDoc *doc, xmlNode *node, const char *id) } static __attribute__((unused)) xmlNode * -find_page_setup (xmlNode *node) +find_node (xmlNode *node, const char *name) { for (; node; node = node->next) { - if (node->name && !strcmp ((char *) node->name, "pageSetup")) + if (node->name && !strcmp ((char *) node->name, name)) return node; - xmlNode *ps = find_page_setup (node->children); + xmlNode *ps = find_node (node->children, name); if (ps) return ps; } @@ -279,14 +279,6 @@ main (int argc, char **argv) xmlNode *root = xmlDocGetRootElement(doc); -#if 0 - /* Limit what we look at to pageSetup node and below. */ - root = find_page_setup(root); - if (!root) - return 0; - root->next = NULL; -#endif - for (int i = 2; i < argc; i++) { if (!strcmp(argv[i], "parents")) @@ -305,6 +297,19 @@ main (int argc, char **argv) print_attribute (root, argv[i] + 5); else if (!strncmp(argv[i], "id:", 3)) print_id (doc, root, argv[i] + 3); + else if (!strncmp(argv[i], "root:", 5)) + { + /* Limit content to descendants of the given node. */ + root = find_node (root, argv[i] + 5); + if (!root) + return 0; + root->next = NULL; + } + else if (!strncmp(argv[i], "musthave:", 9)) + { + if (!find_node (root, argv[i] + 9)) + return 0; + } else if (!strcmp(argv[i], "labels")) print_labels (root); else if (!strncmp(argv[i], "version=", 8)) -- 2.30.2