mirror of
https://github.com/subsurface/subsurface.git
synced 2025-01-19 14:25:27 +00:00
Add crazy (bad) xml parser thing
It only works for the Suunto "one xml file per dive" format, not for the libdivecomputer one that just puts many dives in one file. Maybe there is some way for libxml2 to handle concatenated xml files (start again on errors), but I don't know it yet. I need to get stinking drunk before I look at more xml mess. Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
This commit is contained in:
parent
857e153070
commit
ed45f7cb14
2 changed files with 50 additions and 0 deletions
2
Makefile
Normal file
2
Makefile
Normal file
|
@ -0,0 +1,2 @@
|
|||
parse: parse.c
|
||||
gcc -g -o parse `xml2-config --cflags` parse.c `xml2-config --libs`
|
48
parse.c
Normal file
48
parse.c
Normal file
|
@ -0,0 +1,48 @@
|
|||
#include <stdio.h>
|
||||
#include <libxml/parser.h>
|
||||
#include <libxml/tree.h>
|
||||
|
||||
static void show_one_node(int i, xmlNode *node)
|
||||
{
|
||||
static const char indent[] = " ..";
|
||||
|
||||
if (i >= sizeof(indent))
|
||||
i = sizeof(indent)-1;
|
||||
printf("%.*snode '%s': %s\n", i, indent, node->name, node->content);
|
||||
}
|
||||
|
||||
static void show(int indent, xmlNode *node)
|
||||
{
|
||||
xmlNode *n;
|
||||
|
||||
for (n = node; n; n = n->next) {
|
||||
show_one_node(indent, n);
|
||||
show(indent+2, n->children);
|
||||
}
|
||||
}
|
||||
|
||||
static void parse(const char *filename)
|
||||
{
|
||||
xmlDoc *doc;
|
||||
|
||||
doc = xmlReadFile(filename, NULL, 0);
|
||||
if (!doc) {
|
||||
fprintf(stderr, "Failed to parse '%s'.\n", filename);
|
||||
return;
|
||||
}
|
||||
|
||||
show(0, xmlDocGetRootElement(doc));
|
||||
xmlFreeDoc(doc);
|
||||
xmlCleanupParser();
|
||||
}
|
||||
|
||||
int main(int argc, char **argv)
|
||||
{
|
||||
int i;
|
||||
|
||||
LIBXML_TEST_VERSION
|
||||
|
||||
for (i = 1; i < argc; i++)
|
||||
parse(argv[i]);
|
||||
return 0;
|
||||
}
|
Loading…
Add table
Reference in a new issue