X-Git-Url: https://pintos-os.org/cgi-bin/gitweb.cgi?a=blobdiff_plain;f=parse-xml.c;h=70a7a89928617c8a854253f55d39586a6cf8ed16;hb=d756f0a8abc31ab634f9aff532021e3eb88374ab;hp=9cf6694f91a008f64fef9f1a1dcb37192da289fb;hpb=5763c3751c67a228c6ab3e33934c66247551af52;p=pspp diff --git a/parse-xml.c b/parse-xml.c index 9cf6694f91..70a7a89928 100644 --- a/parse-xml.c +++ b/parse-xml.c @@ -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