diff options
Diffstat (limited to 'src/server/xmlutil.c')
-rw-r--r-- | src/server/xmlutil.c | 27 |
1 files changed, 27 insertions, 0 deletions
diff --git a/src/server/xmlutil.c b/src/server/xmlutil.c new file mode 100644 index 0000000..62736cd --- /dev/null +++ b/src/server/xmlutil.c @@ -0,0 +1,27 @@ +#include "xmlutil.h" +#include <libxml/parser.h> +#include <libxml/xpath.h> + + +xmlChar *getTextFromPath(xmlDocPtr doc, char *xpath) +{ + xmlXPathContextPtr xpathCtx = xmlXPathNewContext(doc); + if (xpathCtx == NULL) + return NULL; + xmlXPathObjectPtr xpathObj = xmlXPathEvalExpression(BAD_CAST xpath, xpathCtx); + if (xpathObj == NULL) + { + xmlXPathFreeContext(xpathCtx); + return NULL; + } + xmlChar *retval = NULL; + if (xpathObj->stringval) + retval = xmlStrdup(xpathObj->stringval); + else if (xpathObj->nodesetval && xpathObj->nodesetval->nodeNr > 0 && xpathObj->nodesetval->nodeTab && xpathObj->nodesetval->nodeTab[0]) + { + retval = xmlNodeGetContent(xpathObj->nodesetval->nodeTab[0]); + } + xmlXPathFreeObject(xpathObj); + xmlXPathFreeContext(xpathCtx); + return retval; +} |