+ /* Don't print out the node name if it is "text" */
+ if (!strcmp(node->name, "text")) {
+ node = node->parent;
+ if (!node || !node->name)
+ return "root";
+ }
+
+ buf += len;
+ *--buf = 0;
+ len--;
+
+ for(;;) {
+ const char *name = node->name;
+ int i = strlen(name);
+ while (--i >= 0) {
+ unsigned char c = name[i];
+ *--buf = tolower(c);
+ if (!--len)
+ return buf;
+ }
+ node = node->parent;
+ if (!node || !node->name)
+ return buf;
+ *--buf = '.';
+ if (!--len)
+ return buf;
+ }
+}
+
+#define MAXNAME 64
+
+static void show_one_node(xmlNode *node)
+{
+ int len;
+ const unsigned char *content;
+ char buffer[MAXNAME];
+ const char *name;
+
+ content = node->content;
+ if (!content)
+ return;
+
+ /* Trim whitespace at beginning */
+ while (isspace(*content))
+ content++;
+
+ /* Trim whitespace at end */
+ len = strlen(content);
+ while (len && isspace(content[len-1]))
+ len--;
+
+ if (!len)
+ return;
+
+ name = nodename(node, buffer, sizeof(buffer));