X-Git-Url: https://pintos-os.org/cgi-bin/gitweb.cgi?a=blobdiff_plain;f=parse-xml.c;h=9faa946f45a7ac64574312b8505d139d4e07f2ee;hb=d311608bad61aa116bea4d1ff1b1ea9d45f798b7;hp=ad1b41833d2908b4b4714cdfc8bd8342a058b782;hpb=b07cc00facf9d44f590fa9b2ef5b2b6ab9b08911;p=pspp diff --git a/parse-xml.c b/parse-xml.c index ad1b41833d..9faa946f45 100644 --- a/parse-xml.c +++ b/parse-xml.c @@ -67,7 +67,7 @@ print_attributes (xmlNode * a_node) { for (xmlNode *node = a_node; node; node = node->next) { - if (node->properties && node->parent->type != XML_DOCUMENT_NODE) + if (node->type == XML_ELEMENT_NODE) { printf ("%s", node->name); for (xmlAttr *attr = node->properties; attr; attr = attr->next) @@ -79,6 +79,31 @@ print_attributes (xmlNode * a_node) } } +static void +print_string(xmlChar *s) +{ + for (char *p = (char *) s; *p; p++) + if (*p == '\n') + printf ("\\n"); + else + putchar (*p); +} + +static void +print_cdata (xmlNode * a_node) +{ + for (xmlNode *node = a_node; node; node = node->next) + { + if (node->type == XML_CDATA_SECTION_NODE) + { + print_string (node->content); + putchar ('\n'); + } + + print_cdata (node->children); + } +} + static void print_attribute (xmlNode *node, const char *attr) { @@ -86,12 +111,48 @@ print_attribute (xmlNode *node, const char *attr) { const char *s = (char *) xmlGetProp (node, (xmlChar *) attr); if (s) - puts (s); + printf ("%s %s=%s\n", node->name, attr, s); print_attribute (node->children, attr); } } +static __attribute__((unused)) xmlNode * +find_page_setup (xmlNode *node) +{ + for (; node; node = node->next) + { + if (node->name && !strcmp ((char *) node->name, "pageSetup")) + return node; + + xmlNode *ps = find_page_setup (node->children); + if (ps) + return ps; + } + return NULL; +} + +static void +print_text (xmlNode *node) +{ + for (; node; node = node->next) + { + if (node->type == XML_ELEMENT_NODE) + { + printf ("%s", node->name); + for (xmlNode *child = node->children; child; child = child->next) + if (child->type == XML_TEXT_NODE) + { + putchar (' '); + print_string (child->content); + } + putchar ('\n'); + } + + print_text (node->children); + } +} + static void usage (void) { @@ -116,10 +177,22 @@ 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 + 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], "attr:", 5)) print_attribute (root, argv[2] + 5); else if (!strcmp(argv[2], "labels"))