📄 tst-dom.c
字号:
/* iksemel (XML parser for Jabber)** Copyright (C) 2000-2003 Gurer Ozen <madcat@e-kolay.net>** This code is free software; you can redistribute it and/or** modify it under the terms of GNU Lesser General Public License.*/#include <stdio.h>#include <stdlib.h>#include <string.h>#include <stdarg.h>#include "iksemel.h"iks *my_x;int nr_tests;#define PR_TEST printf ("DOM test %d:\n", nr_tests)voiddocument (char *xml){ enum ikserror err; iksparser *p; nr_tests++; if (my_x) iks_delete (my_x); p = iks_dom_new (&my_x); err = iks_parse (p, xml, 0, 1); switch (err) { case IKS_OK: break; case IKS_NOMEM: PR_TEST; puts ("Not enough memory."); exit (1); case IKS_BADXML: PR_TEST; printf ("Invalid xml at byte %ld in\n[%s]\n", iks_nr_bytes (p), xml); exit (1); case IKS_HOOK: PR_TEST; puts ("Hook."); } iks_parser_delete (p);}voidtag (char *name, ...){ iks *x; va_list ap; x = my_x; va_start (ap, name); while (1) { char *name = iks_name (x); char *tmp = va_arg (ap, char*); if (NULL == tmp) break; x = iks_find (x, tmp); if (!x) { PR_TEST; printf ("Tag <%s> is not a child of tag <%s>\n", tmp, name); exit (1); } } if (!x || NULL == iks_find (x, name)) { PR_TEST; printf ("Tag <%s> is not a child of tag <%s>\n", name, iks_name (x)); exit (1); } va_end (ap);}voidcdata (char *data, ...){ iks *x; va_list ap; x = my_x; va_start (ap, data); while (1) { char *name = iks_name (x); char *tmp = va_arg (ap, char*); if (NULL == tmp) break; x = iks_find (x, tmp); if (!x) { PR_TEST; printf ("Tag <%s> is not a child of tag <%s>\n", tmp, name); exit (1); } } if (iks_strcmp ( iks_cdata (iks_child (x)), data) != 0) { PR_TEST; printf ("CDATA [%s] not found.\n", data); exit (1); } va_end (ap);}voidattrib (char *att, char *val, ...){ iks *x; va_list ap; x = my_x; va_start (ap, val); while (1) { char *name = iks_name (x); char *tmp = va_arg (ap, char*); if (NULL == tmp) break; x = iks_find (x, tmp); if (!x) { PR_TEST; printf ("Tag <%s> is not a child of tag <%s>\n", tmp, name); exit (1); } } if (iks_strcmp (val, iks_find_attrib (x, att)) != 0) { PR_TEST; printf ("Attribute '%s' not found.\n", att); exit (1); } va_end (ap);}voidstring (char *xml){ char *tmp; tmp = iks_string (iks_stack (my_x), my_x); if (iks_strcmp (tmp, xml) != 0) { PR_TEST; printf ("Result: %s\n", tmp); printf ("Expected: %s\n", xml); exit (1); }}static char buf[] = "<presence id='JCOM_11' to='lala@j.org' type='available'><status>" "" <online&dangerous> "</status>meow<a><b c='d'/>" "</a><test/></presence>";int main (int argc, char *argv[]){ document ("<atag></atag>"); string ("<atag/>"); document ("<test>lala<b>bold</b>blablabla<a><c/></a></test>"); tag ("b", 0); tag ("c", "a", 0); string ("<test>lala<b>bold</b>blablabla<a><c/></a></test>"); document (buf); cdata ("\" <online&dangerous> \"", "status", 0); attrib ("c", "d", "a", "b", 0); tag ("test", 0); string (buf); return 0;}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -