#include #include #include int process(FILE *f) { mxml_node_t *root, *node, *next; const char* elename; root = mxmlLoadFile(NULL, f, MXML_TEXT_CALLBACK); node = mxmlFindElement(root, root, "title-group", NULL, NULL, MXML_DESCEND); while ((next = mxmlWalkNext(node, root, MXML_DESCEND))) { elename = mxmlGetElement(next); if (!elename) { node = next; continue; } if (!strcmp(elename, "article-title")) { printf("article-title:"); for (mxml_node_t *txt = next->child; txt; txt = mxmlGetNextSibling(txt)) { // Thanks to // // https://github.com/younix/sj/blob/master/messaged.c#L237 const char* text = mxmlGetText(txt, NULL); printf(" %s", text); } printf("\n"); break; } node = next; } mxmlDelete(root); return 0; } int main(int argc, char *argv[]) { FILE *f; for (int i = 1; i < argc; i++) { f = fopen(argv[i], "r"); process(f); fclose(f); } return 0; }