summaryrefslogtreecommitdiffstats
path: root/src/server/xmlutil.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/server/xmlutil.h')
-rw-r--r--src/server/xmlutil.h26
1 files changed, 26 insertions, 0 deletions
diff --git a/src/server/xmlutil.h b/src/server/xmlutil.h
new file mode 100644
index 0000000..46a5790
--- /dev/null
+++ b/src/server/xmlutil.h
@@ -0,0 +1,26 @@
+#ifndef XMLUTIL_H_
+#define XMLUTIL_H_
+
+#include <libxml/xmlstring.h>
+#include <libxml/tree.h>
+
+xmlChar *getTextFromPath(xmlDocPtr doc, char *xpath);
+
+#define FOR_EACH_NODE(_doc, _path, _node) do { \
+ xmlXPathContextPtr _makro_xpathCtx = xmlXPathNewContext(_doc); \
+ if (_makro_xpathCtx) { \
+ xmlXPathObjectPtr _makro_xpathObj = xmlXPathEvalExpression(BAD_CAST _path, _makro_xpathCtx); \
+ if (_makro_xpathObj) { \
+ int _makro_i_; \
+ if (_makro_xpathObj->nodesetval) for (_makro_i_ = 0; _makro_i_ < _makro_xpathObj->nodesetval->nodeNr; ++_makro_i_) \
+ { _node = _makro_xpathObj->nodesetval->nodeTab[_makro_i_];
+
+#define END_FOR_EACH \
+ } } \
+ xmlXPathFreeObject(_makro_xpathObj); \
+ } \
+ xmlXPathFreeContext(_makro_xpathCtx); \
+ } while(0)
+
+
+#endif