32#include "xmlcmd_lxml_p.h"
34#include <gwenhywfar/debug.h>
35#include <gwenhywfar/text.h>
51static
void *
_handleXmlPath(const
char *entry,
void *data,
int idx, uint32_t flags);
69 GWEN_XMLCMD_LXML *xcmd;
75 xcmd->docRoot=documentRoot;
79 xcmd->currentDbGroup=xcmd->dbRoot;
80 xcmd->currentTempDbGroup=xcmd->tempDbRoot;
81 xcmd->currentDocNode=documentRoot;
90 GWEN_XMLCMD_LXML *xcmd;
92 xcmd=(GWEN_XMLCMD_LXML*) p;
102 GWEN_XMLCMD_LXML *xcmd;
108 return xcmd->docRoot;
115 GWEN_XMLCMD_LXML *xcmd;
121 return xcmd->currentDocNode;
128 GWEN_XMLCMD_LXML *xcmd;
134 xcmd->currentDocNode=n;
141 GWEN_XMLCMD_LXML *xcmd;
154 GWEN_XMLCMD_LXML *xcmd;
160 return xcmd->currentDbGroup;
167 GWEN_XMLCMD_LXML *xcmd;
173 xcmd->currentDbGroup=db;
180 GWEN_XMLCMD_LXML *xcmd;
186 return xcmd->tempDbRoot;
193 GWEN_XMLCMD_LXML *xcmd;
199 return xcmd->currentTempDbGroup;
206 GWEN_XMLCMD_LXML *xcmd;
212 xcmd->currentTempDbGroup=db;
219 GWEN_XMLCMD_LXML *xcmd;
227 if (xcmd->currentStackPos<GWEN_XMLCMD_LXML_PATH_MAXDEPTH) {
228 xcmd->xmlNodeStack[xcmd->currentStackPos]=xNode;
229 xcmd->currentStackPos++;
230 xcmd->currentDocNode=xNode;
242 GWEN_XMLCMD_LXML *xcmd;
249 if (xcmd->currentStackPos>0) {
250 xNode=xcmd->xmlNodeStack[xcmd->currentStackPos-1];
255 xcmd->currentStackPos--;
256 xcmd->currentDocNode=xNode;
277 if (n->type==XML_ELEMENT_NODE) {
278 if (n->name && strcmp((
const char *)n->name, elemName)==0) {
297 if (n->type==XML_ELEMENT_NODE) {
298 if (n->name && strcmp((
const char *)n->name, elemName)==0) {
320 xmlNodeSetContent(node, BAD_CAST value);
341 if (node->type==XML_TEXT_NODE) {
342 return (
const char *)node->content;
356 snprintf(numbuf,
sizeof(numbuf)-1,
"%d", value);
357 numbuf[
sizeof(numbuf)-1]=0;
371 if (1!=sscanf(s,
"%i", &i))
380 GWEN_XMLCMD_LXML_TWOSTRINGS *tsLevel1;
383 if (tsLevel1->string2) {
389 GWEN_XMLCMD_LXML_TWOSTRINGS *tsLevel2;
390 const char *result=
NULL;
393 if (tsLevel2->string2) {
395 result=(
const char*) xmlGetNsProp(n, BAD_CAST tsLevel2->string2, BAD_CAST tsLevel2->string1);
399 result=(
const char*) xmlGetNoNsProp(n, BAD_CAST tsLevel2->string1);
417 if (n->type==XML_TEXT_NODE) {
419 return (
const char *)n->content;
436 GWEN_XMLCMD_LXML_TWOSTRINGS *tsLevel1;
439 if (tsLevel1->string2) {
445 GWEN_XMLCMD_LXML_TWOSTRINGS *tsLevel2;
448 if (tsLevel2->string2) {
452 nameSpace=xmlSearchNs(n->doc, n, BAD_CAST tsLevel2->string1);
453 xmlNewNsProp(n, nameSpace, BAD_CAST tsLevel2->string2, BAD_CAST value);
457 xmlNewProp(n, BAD_CAST tsLevel2->string1, BAD_CAST value);
468 xmlNodeSetContent(n, BAD_CAST value);
483 xmlNsPtr nameSpace=
NULL;
490 p=strchr(entry,
':');
497 if (plen>=
sizeof(prefix)) {
501 strncpy(prefix, entry, plen);
503 nameSpace=xmlSearchNs(n->doc, n, BAD_CAST prefix);
530 nn=xmlNewChild(n, nameSpace, BAD_CAST name,
NULL);
539 if (nn->type==XML_ELEMENT_NODE) {
540 if (nn->name && strcmp((
const char *)nn->name, name)==0) {
565 "Entry \"%s\" not found, creating", entry);
566 nn=xmlNewChild(n, nameSpace, BAD_CAST name,
NULL);
592 GWEN_XMLCMD_LXML_TWOSTRINGS *ts;
603 if (ts->ownStringsBitmap & 1) {
607 if (ts->ownStringsBitmap & 2) {
620 GWEN_XMLCMD_LXML_TWOSTRINGS *ts;
624 s=strchr(source, delimiter);
630 ts->ownStringsBitmap|=1;
633 ts->string2=(
char*)s;
638 ts->string1=(
char*)source;
GWEN_DB_NODE * GWEN_DB_Group_new(const char *name)
void GWEN_DB_Group_free(GWEN_DB_NODE *n)
struct GWEN_DB_NODE GWEN_DB_NODE
#define DBG_VERBOUS(dbg_logger, format,...)
#define DBG_INFO(dbg_logger, format,...)
#define DBG_ERROR(dbg_logger, format,...)
#define GWEN_ERROR_GENERIC
#define GWEN_INHERIT_SETDATA(bt, t, element, data, fn)
#define GWEN_INHERIT(bt, t)
#define GWEN_INHERIT_GETDATA(bt, t, element)
#define GWEN_FREE_OBJECT(varname)
#define GWEN_NEW_OBJECT(typ, varname)
static void GWENHYWFAR_CB _freeData(GWEN_UNUSED void *bp, void *p)
void * GWEN_Path_HandleWithIdx(const char *path, void *data, uint32_t flags, GWEN_PATHIDXHANDLERPTR elementFunction)
#define GWEN_PATH_FLAGS_CREATE_GROUP
#define GWEN_PATH_FLAGS_PATHMUSTEXIST
#define GWEN_PATH_FLAGS_PATHCREATE
#define GWEN_PATH_FLAGS_NAMEMUSTNOTEXIST
#define GWEN_PATH_FLAGS_CREATE_VAR
#define GWEN_PATH_FLAGS_LAST
#define GWEN_PATH_FLAGS_PATHMUSTNOTEXIST
#define GWEN_PATH_FLAGS_VARIABLE
#define GWEN_PATH_FLAGS_NAMEMUSTEXIST
char * GWEN_Text_strndup(const char *s, size_t n)
GWEN_XMLCOMMANDER * GWEN_XmlCommander_new(void)
struct GWEN_XMLCOMMANDER GWEN_XMLCOMMANDER
void GWEN_XmlCommanderLibXml_SetXmlCharValueByPath(xmlNodePtr elem, const char *path, const char *value)
xmlNodePtr GWEN_XmlCommanderLibXml_FindFirstElement(xmlNodePtr parent, const char *elemName)
static void * _handleXmlPath(const char *entry, void *data, int idx, uint32_t flags)
int GWEN_XmlCommanderLibXml_GetIntValue(xmlNodePtr n, const char *path, int defValue)
void GWEN_XmlCommanderLibXml_EnterDocNode(GWEN_XMLCOMMANDER *cmd, xmlNodePtr xNode)
void GWEN_XmlCommanderLibXml_LeaveDocNode(GWEN_XMLCOMMANDER *cmd)
void _twoStrings_free(GWEN_XMLCMD_LXML_TWOSTRINGS *ts)
int GWEN_XmlCommanderLibXml_SetXmlCharValue(xmlNodePtr n, const char *path, const char *value)
GWEN_DB_NODE * GWEN_XmlCommanderLibXml_GetTempDbRoot(const GWEN_XMLCOMMANDER *cmd)
static void GWENHYWFAR_CB _freeData(void *bp, void *p)
GWEN_DB_NODE * GWEN_XmlCommanderLibXml_GetCurrentTempDbGroup(const GWEN_XMLCOMMANDER *cmd)
const char * GWEN_XmlCommanderLibXml_GetXmlCharValue(xmlNodePtr n, const char *path, const char *defValue)
GWEN_XMLCOMMANDER * GWEN_XmlCommanderLibXml_new(xmlNodePtr documentRoot, GWEN_DB_NODE *dbRoot)
xmlNodePtr GWEN_XmlCommanderLibXml_FindNextElement(xmlNodePtr elem, const char *elemName)
xmlNodePtr GWEN_XmlCommanderLibXml_GetXmlNode(xmlNodePtr n, const char *path, uint32_t flags)
xmlNodePtr GWEN_XmlCommanderLibXml_GetCurrentDocNode(const GWEN_XMLCOMMANDER *cmd)
xmlNodePtr GWEN_XmlCommanderLibXml_GetDocRoot(const GWEN_XMLCOMMANDER *cmd)
const char * GWEN_XmlCommanderLibXml_GetXmlCharValueByPath(xmlNodePtr elem, const char *path, const char *defValue)
void GWEN_XmlCommanderLibXml_SetCurrentDocNode(GWEN_XMLCOMMANDER *cmd, xmlNodePtr n)
void GWEN_XmlCommanderLibXml_SetCurrentDbGroup(GWEN_XMLCOMMANDER *cmd, GWEN_DB_NODE *db)
int GWEN_XmlCommanderLibXml_SetIntValue(xmlNodePtr n, const char *path, int value)
GWEN_XMLCMD_LXML_TWOSTRINGS * _twoStrings_new()
GWEN_DB_NODE * GWEN_XmlCommanderLibXml_GetDbRoot(const GWEN_XMLCOMMANDER *cmd)
void GWEN_XmlCommanderLibXml_SetCurrentTempDbGroup(GWEN_XMLCOMMANDER *cmd, GWEN_DB_NODE *db)
GWEN_DB_NODE * GWEN_XmlCommanderLibXml_GetCurrentDbGroup(const GWEN_XMLCOMMANDER *cmd)
GWEN_XMLCMD_LXML_TWOSTRINGS * _twoStrings_fromString(const char *source, uint8_t delimiter)