32#include "xmlcmd_lxml_p.h"
34#include <gwenhywfar/debug.h>
50static
void *
_handleXmlPath(const
char *entry,
void *data,
int idx, uint32_t flags);
68 GWEN_XMLCMD_LXML *xcmd;
74 xcmd->docRoot=documentRoot;
78 xcmd->currentDbGroup=xcmd->dbRoot;
79 xcmd->currentTempDbGroup=xcmd->tempDbRoot;
80 xcmd->currentDocNode=documentRoot;
89 GWEN_XMLCMD_LXML *xcmd;
91 xcmd=(GWEN_XMLCMD_LXML*) p;
101 GWEN_XMLCMD_LXML *xcmd;
107 return xcmd->docRoot;
114 GWEN_XMLCMD_LXML *xcmd;
120 return xcmd->currentDocNode;
127 GWEN_XMLCMD_LXML *xcmd;
133 xcmd->currentDocNode=n;
140 GWEN_XMLCMD_LXML *xcmd;
153 GWEN_XMLCMD_LXML *xcmd;
159 return xcmd->currentDbGroup;
166 GWEN_XMLCMD_LXML *xcmd;
172 xcmd->currentDbGroup=db;
179 GWEN_XMLCMD_LXML *xcmd;
185 return xcmd->tempDbRoot;
192 GWEN_XMLCMD_LXML *xcmd;
198 return xcmd->currentTempDbGroup;
205 GWEN_XMLCMD_LXML *xcmd;
211 xcmd->currentTempDbGroup=db;
218 GWEN_XMLCMD_LXML *xcmd;
226 if (xcmd->currentStackPos<GWEN_XMLCMD_LXML_PATH_MAXDEPTH) {
227 xcmd->xmlNodeStack[xcmd->currentStackPos]=xNode;
228 xcmd->currentStackPos++;
229 xcmd->currentDocNode=xNode;
241 GWEN_XMLCMD_LXML *xcmd;
248 if (xcmd->currentStackPos>0) {
249 xNode=xcmd->xmlNodeStack[xcmd->currentStackPos-1];
254 xcmd->currentStackPos--;
255 xcmd->currentDocNode=xNode;
276 if (n->type==XML_ELEMENT_NODE) {
277 if (n->name && strcmp((
const char *)n->name, elemName)==0) {
296 if (n->type==XML_ELEMENT_NODE) {
297 if (n->name && strcmp((
const char *)n->name, elemName)==0) {
319 xmlNodeSetContent(node, BAD_CAST value);
340 if (node->type==XML_TEXT_NODE) {
341 return (
const char *)node->content;
355 snprintf(numbuf,
sizeof(numbuf)-1,
"%d", value);
356 numbuf[
sizeof(numbuf)-1]=0;
370 if (1!=sscanf(s,
"%i", &i))
379 GWEN_XMLCMD_LXML_TWOSTRINGS *tsLevel1;
382 if (tsLevel1->string2) {
388 GWEN_XMLCMD_LXML_TWOSTRINGS *tsLevel2;
389 const char *result=
NULL;
392 if (tsLevel2->string2) {
394 result=(
const char*) xmlGetNsProp(n, BAD_CAST tsLevel2->string2, BAD_CAST tsLevel2->string1);
398 result=(
const char*) xmlGetNoNsProp(n, BAD_CAST tsLevel2->string1);
416 if (n->type==XML_TEXT_NODE) {
418 return (
const char *)n->content;
435 GWEN_XMLCMD_LXML_TWOSTRINGS *tsLevel1;
438 if (tsLevel1->string2) {
444 GWEN_XMLCMD_LXML_TWOSTRINGS *tsLevel2;
447 if (tsLevel2->string2) {
451 nameSpace=xmlSearchNs(n->doc, n, BAD_CAST tsLevel2->string1);
452 xmlNewNsProp(n, nameSpace, BAD_CAST tsLevel2->string2, BAD_CAST value);
456 xmlNewProp(n, BAD_CAST tsLevel2->string1, BAD_CAST value);
467 xmlNodeSetContent(n, BAD_CAST value);
482 xmlNsPtr nameSpace=
NULL;
489 p=strchr(entry,
':');
496 if (plen>=
sizeof(prefix)) {
500 strncpy(prefix, entry, plen);
502 nameSpace=xmlSearchNs(n->doc, n, BAD_CAST prefix);
529 nn=xmlNewChild(n, nameSpace, BAD_CAST name,
NULL);
538 if (nn->type==XML_ELEMENT_NODE) {
539 if (nn->name && strcmp((
const char *)nn->name, name)==0) {
564 "Entry \"%s\" not found, creating", entry);
565 nn=xmlNewChild(n, nameSpace, BAD_CAST name,
NULL);
591 GWEN_XMLCMD_LXML_TWOSTRINGS *ts;
602 if (ts->ownStringsBitmap & 1) {
606 if (ts->ownStringsBitmap & 2) {
619 GWEN_XMLCMD_LXML_TWOSTRINGS *ts;
623 s=strchr(source, delimiter);
628 ts->string1=strndup(source, idx);
629 ts->ownStringsBitmap|=1;
632 ts->string2=(
char*)s;
637 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, args...)
#define DBG_INFO(dbg_logger, format, args...)
#define DBG_ERROR(dbg_logger, format, args...)
#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)
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
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)