34 #include <gwenhywfar/debug.h> 35 #include <gwenhywfar/text.h> 36 #include <gwenhywfar/gwendate.h> 45 GWEN_XML2DB_CONTEXT *ctx;
50 ctx->docRoot=documentRoot;
55 ctx->currentDbGroup=ctx->dbRoot;
56 ctx->currentTempDbGroup=ctx->tempDbRoot;
57 ctx->currentDocNode=documentRoot;
68 ctx->xmlNodeStack=
NULL;
83 ctx->currentDocNode=xmlNode;
99 ctx->currentDocNode=xmlNode;
121 cpyOfPath=strdup(path);
124 property=cpyOfPath+idx+1;
153 if (value && *value) {
166 if (!(name && *name)) {
174 if (!(typ && *typ)) {
183 if (strcasecmp(typ,
"string")==0) {
188 else if (strcasecmp(typ,
"date")==0) {
193 if (!(tmpl && *tmpl)) {
207 if (strcasecmp(mode,
"add")==0) {
213 else if (strcasecmp(mode,
"append")==0) {
218 const char *delimiter;
225 if (delimiter && *delimiter) {
226 if (strcasecmp(delimiter,
"\\n")==0)
228 else if (strcasecmp(delimiter,
"\\t")==0)
239 else if (strcasecmp(mode,
"replace")==0) {
344 if (!(name && *name)) {
350 dbLast=ctx->currentDbGroup;
359 ctx->currentDbGroup=dbLast;
378 if (!(name && *name)) {
384 dbLast=ctx->currentTempDbGroup;
388 assert(ctx->currentTempDbGroup);
398 ctx->currentTempDbGroup=dbLast;
417 if (!(name && *name)) {
441 if (!(path && *path)) {
447 if (value && *value) {
490 if (!(path && *path)) {
496 if (!(pattern && *pattern)) {
527 if (!(path && *path)) {
533 if (!(pattern && *pattern)) {
563 if (!(path && *path)) {
569 if (value && *value) {
594 if (!(path && *path)) {
600 if (!(value && *value)) {
621 if (!(path && *path)) {
650 if (!(path && *path)) {
688 if (strcasecmp(name,
"XmlEnter")==0)
690 else if (strcasecmp(name,
"XmlForEvery")==0)
692 else if (strcasecmp(name,
"DbCreateAndEnterGroup")==0)
694 else if (strcasecmp(name,
"DbCreateAndEnterTempGroup")==0)
696 else if (strcasecmp(name,
"DbSetCharValue")==0)
698 else if (strcasecmp(name,
"DbSetTempCharValue")==0)
700 else if (strcasecmp(name,
"XmlIfCharDataMatches")==0)
702 else if (strcasecmp(name,
"XmlIfNotCharDataMatches")==0)
704 else if (strcasecmp(name,
"XmlIfHasCharData")==0)
706 else if (strcasecmp(name,
"XmlIfNotHasCharData")==0)
708 else if (strcasecmp(name,
"XmlIfPathExists")==0)
710 else if (strcasecmp(name,
"XmlIfNotPathExists")==0)
735 GWEN_XML2DB_CONTEXT *ctx;
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)
int GWEN_Xml2Db_Handle_XmlForEvery(GWEN_XML2DB_CONTEXT *ctx, GWEN_XMLNODE *xmlNode)
char * GWEN_Buffer_GetStart(const GWEN_BUFFER *bf)
void GWEN_Text_CondenseBuffer(GWEN_BUFFER *buf)
GWEN_DATE * GWEN_Date_fromStringWithTemplate(const char *s, const char *tmpl)
struct GWEN_DB_NODE GWEN_DB_NODE
void GWEN_DB_Group_free(GWEN_DB_NODE *n)
#define GWEN_ERROR_INVALID
const char * GWEN_XMLNode_GetProperty(const GWEN_XMLNODE *n, const char *name, const char *defaultValue)
GWEN_XMLNODE * GWEN_XMLNode_FindNextTag(const GWEN_XMLNODE *n, const char *tname, const char *pname, const char *pvalue)
int GWEN_Xml2Db_Handle_XmlIfHasCharData(GWEN_XML2DB_CONTEXT *ctx, GWEN_XMLNODE *xmlNode)
GWEN_XMLNODE_LIST2 * GWEN_XMLNode_List2_new()
void GWEN_Xml2Db_Context_EnterDocNode(GWEN_XML2DB_CONTEXT *ctx, GWEN_XMLNODE *xmlNode)
#define GWEN_FREE_OBJECT(varname)
#define GWEN_PATH_FLAGS_CREATE_GROUP
int GWEN_Xml2Db_Handle_XmlIfNotCharDataMatches(GWEN_XML2DB_CONTEXT *ctx, GWEN_XMLNODE *xmlNode)
int GWEN_Xml2Db_Handle_DbSetTempCharValue(GWEN_XML2DB_CONTEXT *ctx, GWEN_XMLNODE *xmlNode)
void GWEN_XMLNode_List2_free(GWEN_XMLNODE_LIST2 *l)
GWEN_BUFFER * GWEN_Buffer_new(char *buffer, uint32_t size, uint32_t used, int take)
int GWEN_Xml2Db_Handle_XmlIfPathExists(GWEN_XML2DB_CONTEXT *ctx, GWEN_XMLNODE *xmlNode)
GWEN_XMLNODE * GWEN_XMLNode_FindFirstTag(const GWEN_XMLNODE *n, const char *tname, const char *pname, const char *pvalue)
#define GWEN_NEW_OBJECT(typ, varname)
int GWEN_XMLNode_GetIntProperty(const GWEN_XMLNODE *n, const char *name, int defaultValue)
void GWEN_Xml2Db_Context_free(GWEN_XML2DB_CONTEXT *ctx)
const char * GWEN_Xml2Db_GetCharValueByPath(GWEN_XMLNODE *xmlNode, const char *path, const char *defValue)
GWEN_XMLNODE * GWEN_XMLNode_GetNextTag(const GWEN_XMLNODE *n)
void GWEN_XMLNode_List2_PopBack(GWEN_XMLNODE_LIST2 *l)
int GWEN_Xml2Db(GWEN_XMLNODE *xmlNodeDocument, GWEN_XMLNODE *xmlNodeSchema, GWEN_DB_NODE *dbDestination)
void GWEN_Date_free(GWEN_DATE *gd)
GWEN_XMLNODE * GWEN_XMLNode_GetNodeByXPath(GWEN_XMLNODE *n, const char *path, uint32_t flags)
int GWEN_Buffer_AppendByte(GWEN_BUFFER *bf, char c)
const char * GWEN_DB_GetCharValue(GWEN_DB_NODE *n, const char *path, int idx, const char *defVal)
GWEN_DB_NODE * GWEN_DB_GetGroup(GWEN_DB_NODE *n, uint32_t flags, const char *path)
void GWEN_Buffer_free(GWEN_BUFFER *bf)
int GWEN_DB_DeleteVar(GWEN_DB_NODE *n, const char *path)
struct GWEN_BUFFER GWEN_BUFFER
A dynamically resizeable text buffer.
int GWEN_Xml2Db_Handle_XmlIfNotHasCharData(GWEN_XML2DB_CONTEXT *ctx, GWEN_XMLNODE *xmlNode)
const char * GWEN_Date_GetString(const GWEN_DATE *gd)
int GWEN_XMLNode_GetXPath(const GWEN_XMLNODE *n1, const GWEN_XMLNODE *n2, GWEN_BUFFER *nbuf)
void GWEN_Xml2Db_Context_LeaveDocNode(GWEN_XML2DB_CONTEXT *ctx)
int GWEN_Xml2Db_Handle_XmlIfNotPathExists(GWEN_XML2DB_CONTEXT *ctx, GWEN_XMLNODE *xmlNode)
int GWEN_Xml2Db_Handle_DbSetCharValue_internal(GWEN_XML2DB_CONTEXT *ctx, GWEN_XMLNODE *xmlNode, GWEN_DB_NODE *dbCurrent)
#define DBG_ERROR(dbg_logger, format, args...)
GWEN_XMLNODE * GWEN_XMLNode_GetFirstTag(const GWEN_XMLNODE *n)
const char * GWEN_XMLNode_GetData(const GWEN_XMLNODE *n)
int GWEN_Text_ComparePattern(const char *w, const char *p, int sensecase)
int GWEN_DB_SetCharValue(GWEN_DB_NODE *n, uint32_t flags, const char *path, const char *val)
int GWEN_Xml2Db_Handle_DbSetCharValue(GWEN_XML2DB_CONTEXT *ctx, GWEN_XMLNODE *xmlNode)
#define GWEN_PATH_FLAGS_PATHMUSTEXIST
#define DBG_INFO(dbg_logger, format, args...)
void GWEN_DB_UnlinkGroup(GWEN_DB_NODE *n)
GWEN_XMLNODE * GWEN_XMLNode_List2_GetBack(GWEN_XMLNODE_LIST2 *l)
void GWEN_XMLNode_List2_PushBack(GWEN_XMLNODE_LIST2 *l, GWEN_XMLNODE *p)
const char * GWEN_XMLNode_GetCharValueByPath(GWEN_XMLNODE *n, const char *name, const char *defValue)
GWEN_DB_NODE * GWEN_DB_Group_new(const char *name)
int GWEN_Xml2Db_Handle_XmlEnter(GWEN_XML2DB_CONTEXT *ctx, GWEN_XMLNODE *xmlNode)
int GWEN_Xml2Db_Handle_DbCreateAndEnterTempGroup(GWEN_XML2DB_CONTEXT *ctx, GWEN_XMLNODE *xmlNode)
int GWEN_Xml2Db_Handle_DbCreateAndEnterGroup(GWEN_XML2DB_CONTEXT *ctx, GWEN_XMLNODE *xmlNode)
int GWEN_Xml2Db_Handle_XmlIfCharDataMatches(GWEN_XML2DB_CONTEXT *ctx, GWEN_XMLNODE *xmlNode)
int GWEN_Xml2Db_ConvertAndSetCharValue(GWEN_UNUSED GWEN_XML2DB_CONTEXT *ctx, GWEN_XMLNODE *xmlNode, GWEN_DB_NODE *dbCurrent, const char *value)
struct GWEN__XMLNODE GWEN_XMLNODE
int GWEN_Xml2Db_HandleChildren(GWEN_XML2DB_CONTEXT *ctx, GWEN_XMLNODE *xmlNode)
int GWEN_Buffer_AppendString(GWEN_BUFFER *bf, const char *buffer)
#define GWEN_DB_FLAGS_DEFAULT
struct GWEN_DATE GWEN_DATE