34 #include <gwenhywfar/debug.h> 35 #include <gwenhywfar/text.h> 36 #include <gwenhywfar/gwendate.h> 77 GWEN_XML2DB_CONTEXT *ctx;
110 if (strcasecmp(name,
"DbEnter")==0)
112 else if (strcasecmp(name,
"DbForEvery")==0)
114 else if (strcasecmp(name,
"XmlCreateAndEnterElement")==0)
116 else if (strcasecmp(name,
"XmlSetCharValue")==0)
118 else if (strcasecmp(name,
"DbIfCharDataMatches")==0)
120 else if (strcasecmp(name,
"DbIfNotCharDataMatches")==0)
122 else if (strcasecmp(name,
"DbIfHasCharData")==0)
124 else if (strcasecmp(name,
"DbIfNotHasCharData")==0)
126 else if (strcasecmp(name,
"DbIfPathExists")==0)
128 else if (strcasecmp(name,
"DbIfNotPathExists")==0)
155 if (!(name && *name)) {
183 if (!(name && *name)) {
212 if (!(name && *name)) {
218 dbLast=ctx->currentDbGroup;
223 ctx->currentDbGroup=dbNew;
229 ctx->currentDbGroup=dbLast;
254 if (!(name && *name)) {
260 dbLast=ctx->currentDbGroup;
265 ctx->currentDbGroup=dbNew;
271 ctx->currentDbGroup=dbLast;
292 if (!(name && *name)) {
298 if (!(pattern && *pattern)) {
327 if (!(name && *name)) {
333 if (!(pattern && *pattern)) {
361 if (!(name && *name)) {
389 if (!(name && *name)) {
451 if (!(path && *path)) {
475 if (!(name && *name)) {
481 if (value && *value) {
519 cpyOfPath=strdup(path);
522 property=cpyOfPath+idx+1;
557 if (value && *value) {
568 if (!(name && *name)) {
575 if (!(typ && *typ)) {
581 if (strcasecmp(typ,
"string")==0) {
587 else if (strcasecmp(typ,
"date")==0) {
592 if (!(tmpl && *tmpl)) {
GWEN_XML2DB_CONTEXT * GWEN_Xml2Db_Context_new(GWEN_XMLNODE *documentRoot, GWEN_DB_NODE *dbRoot)
int GWEN_DB_ReplaceVars(GWEN_DB_NODE *db, const char *s, GWEN_BUFFER *dbuf)
static int _dbIfNotPathExists(GWEN_XML2DB_CONTEXT *ctx, GWEN_XMLNODE *xmlNode)
char * GWEN_Buffer_GetStart(const GWEN_BUFFER *bf)
GWEN_DATE * GWEN_Date_fromString(const char *s)
void GWEN_Text_CondenseBuffer(GWEN_BUFFER *buf)
static int _setCharValueByPath(GWEN_XMLNODE *xmlNode, const char *path, const char *value)
struct GWEN_DB_NODE GWEN_DB_NODE
#define GWEN_ERROR_INVALID
static int _dbEnter(GWEN_XML2DB_CONTEXT *ctx, GWEN_XMLNODE *xmlNode)
uint32_t GWEN_Buffer_GetUsedBytes(const GWEN_BUFFER *bf)
const char * GWEN_XMLNode_GetProperty(const GWEN_XMLNODE *n, const char *name, const char *defaultValue)
void GWEN_Xml2Db_Context_EnterDocNode(GWEN_XML2DB_CONTEXT *ctx, GWEN_XMLNODE *xmlNode)
#define GWEN_PATH_FLAGS_CREATE_GROUP
void GWEN_XMLNode_SetProperty(GWEN_XMLNODE *n, const char *name, const char *value)
int GWEN_Date_toStringWithTemplate(const GWEN_DATE *t, const char *tmpl, GWEN_BUFFER *buf)
int GWEN_Xml2Db_Context_HandleChildren(GWEN_XML2DB_CONTEXT *ctx, GWEN_XMLNODE *xmlNode)
GWEN_BUFFER * GWEN_Buffer_new(char *buffer, uint32_t size, uint32_t used, int take)
int GWEN_XmlFromDb(GWEN_XMLNODE *xmlNodeDestination, GWEN_XMLNODE *xmlNodeSchema, GWEN_DB_NODE *dbSource)
static int _dbIfNotHasCharData(GWEN_XML2DB_CONTEXT *ctx, GWEN_XMLNODE *xmlNode)
static int _dbIfHasCharData(GWEN_XML2DB_CONTEXT *ctx, GWEN_XMLNODE *xmlNode)
int GWEN_XMLNode_GetIntProperty(const GWEN_XMLNODE *n, const char *name, int defaultValue)
void GWEN_Xml2Db_Context_free(GWEN_XML2DB_CONTEXT *ctx)
GWEN_XMLNODE * GWEN_XMLNode_GetNextTag(const GWEN_XMLNODE *n)
void GWEN_Date_free(GWEN_DATE *gd)
GWEN_XMLNODE * GWEN_XMLNode_GetNodeByXPath(GWEN_XMLNODE *n, const char *path, uint32_t flags)
#define GWEN_ERROR_GENERIC
const char * GWEN_DB_GetCharValue(GWEN_DB_NODE *n, const char *path, int idx, const char *defVal)
static int _dbIfCharDataMatches(GWEN_XML2DB_CONTEXT *ctx, GWEN_XMLNODE *xmlNode)
GWEN_DB_NODE * GWEN_DB_GetGroup(GWEN_DB_NODE *n, uint32_t flags, const char *path)
int GWEN_Text_EscapeXmlToBuffer(const char *src, GWEN_BUFFER *buf)
void GWEN_Buffer_free(GWEN_BUFFER *bf)
struct GWEN_BUFFER GWEN_BUFFER
A dynamically resizeable text buffer.
int GWEN_XMLNode_GetXPath(const GWEN_XMLNODE *n1, const GWEN_XMLNODE *n2, GWEN_BUFFER *nbuf)
#define GWEN_PATH_FLAGS_CREATE_VAR
void GWEN_Xml2Db_Context_LeaveDocNode(GWEN_XML2DB_CONTEXT *ctx)
#define DBG_ERROR(dbg_logger, format, args...)
GWEN_XMLNODE * GWEN_XMLNode_GetFirstTag(const GWEN_XMLNODE *n)
int GWEN_XMLNode_SetCharValueByPath(GWEN_XMLNODE *n, uint32_t flags, const char *name, const char *value)
const char * GWEN_XMLNode_GetData(const GWEN_XMLNODE *n)
int GWEN_Text_ComparePattern(const char *w, const char *p, int sensecase)
static int _xmlSetCharValue(GWEN_XML2DB_CONTEXT *ctx, GWEN_XMLNODE *xmlNode)
#define DBG_INFO(dbg_logger, format, args...)
static int _xmlCreateAndEnterElement(GWEN_XML2DB_CONTEXT *ctx, GWEN_XMLNODE *xmlNode)
GWEN_DB_NODE * GWEN_DB_FindFirstGroup(GWEN_DB_NODE *n, const char *name)
static int _handleChildren_fromDb(GWEN_XML2DB_CONTEXT *ctx, GWEN_XMLNODE *xmlNode)
#define GWEN_PATH_FLAGS_NAMEMUSTEXIST
GWEN_DB_NODE * GWEN_DB_FindNextGroup(GWEN_DB_NODE *n, const char *name)
struct GWEN__XMLNODE GWEN_XMLNODE
static int _convertAndSetCharValue(GWEN_XMLNODE *xmlDocNode, GWEN_XMLNODE *xmlSchemaNode, const char *value)
static int _dbIfNotCharDataMatches(GWEN_XML2DB_CONTEXT *ctx, GWEN_XMLNODE *xmlNode)
static int _dbForEvery(GWEN_XML2DB_CONTEXT *ctx, GWEN_XMLNODE *xmlNode)
struct GWEN_DATE GWEN_DATE
static int _dbIfPathExists(GWEN_XML2DB_CONTEXT *ctx, GWEN_XMLNODE *xmlNode)