#include <gwenhywfar/gwenhywfarapi.h>
#include <gwenhywfar/bufferedio.h>
#include <gwenhywfar/stringlist.h>
#include <gwenhywfar/types.h>
#include <gwenhywfar/list2.h>
#include <gwenhywfar/iolayer.h>
#include <stdio.h>
#include <gwenhywfar/xmlctx.h>
#include <gwenhywfar/fastbuffer.h>
Go to the source code of this file.
Defines | |
Read Flags | |
#define | GWEN_XML_FLAGS_DEFAULT |
#define | GWEN_XML_FLAGS_HANDLE_COMMENTS 0x0001 |
#define | GWEN_XML_FLAGS_HANDLE_HEADERS 0x0080 |
#define | GWEN_XML_FLAGS_HANDLE_NAMESPACES 0x0200 |
#define | GWEN_XML_FLAGS_HANDLE_OPEN_HTMLTAGS 0x0004 |
#define | GWEN_XML_FLAGS_INDENT 0x0002 |
#define | GWEN_XML_FLAGS_KEEP_BLANKS 0x0020 |
#define | GWEN_XML_FLAGS_KEEP_CNTRL 0x0010 |
#define | GWEN_XML_FLAGS_NO_CONDENSE 0x0008 |
#define | GWEN_XML_FLAGS_SIMPLE 0x0040 |
#define | GWEN_XML_FLAGS_TOLERANT_ENDTAGS 0x0100 |
Typedefs | |
typedef struct GWEN__XMLNODE | GWEN_XMLNODE |
typedef struct GWEN_XMLNODE_NAMESPACE | GWEN_XMLNODE_NAMESPACE |
typedef struct GWEN_XMLNODE_PATH | GWEN_XMLNODE_PATH |
Enumerations | |
enum | GWEN_XMLNODE_TYPE { GWEN_XMLNodeTypeTag = 0, GWEN_XMLNodeTypeData, GWEN_XMLNodeTypeComment } |
Functions | |
GWENHYWFAR_API GWEN_XMLNODE_NAMESPACE * | GWEN_XMLNode_NameSpace_dup (const GWEN_XMLNODE_NAMESPACE *ns) |
GWENHYWFAR_API void | GWEN_XMLNode_NameSpace_free (GWEN_XMLNODE_NAMESPACE *ns) |
GWENHYWFAR_API const char * | GWEN_XMLNode_NameSpace_GetName (const GWEN_XMLNODE_NAMESPACE *ns) |
GWENHYWFAR_API const char * | GWEN_XMLNode_NameSpace_GetUrl (const GWEN_XMLNODE_NAMESPACE *ns) |
GWENHYWFAR_API GWEN_XMLNODE_NAMESPACE * | GWEN_XMLNode_NameSpace_new (const char *name, const char *url) |
GWENHYWFAR_API int | GWEN_XMLNode_Path_Dive (GWEN_XMLNODE_PATH *np, GWEN_XMLNODE *n) |
GWENHYWFAR_API void | GWEN_XMLNode_Path_Dump (GWEN_XMLNODE_PATH *np) |
GWENHYWFAR_API GWEN_XMLNODE_PATH * | GWEN_XMLNode_Path_dup (const GWEN_XMLNODE_PATH *np) |
GWENHYWFAR_API void | GWEN_XMLNode_Path_free (GWEN_XMLNODE_PATH *np) |
GWENHYWFAR_API GWEN_XMLNODE_PATH * | GWEN_XMLNode_Path_new () |
GWENHYWFAR_API GWEN_XMLNODE * | GWEN_XMLNode_Path_Surface (GWEN_XMLNODE_PATH *np) |
Reading And Writing From/To Streams | |
GWENHYWFAR_API int | GWEN_XML_ReadFile (GWEN_XMLNODE *n, const char *filepath, uint32_t flags) |
GWENHYWFAR_API int | GWEN_XML_ReadFromFastBuffer (GWEN_XML_CONTEXT *ctx, GWEN_FAST_BUFFER *fb) |
GWENHYWFAR_API int | GWEN_XML_ReadFromIo (GWEN_XML_CONTEXT *ctx, GWEN_IO_LAYER *io) |
GWENHYWFAR_API void | GWEN_XMLNode_AddNameSpace (GWEN_XMLNODE *n, const GWEN_XMLNODE_NAMESPACE *ns) |
GWENHYWFAR_API GWEN_XMLNODE_NAMESPACE * | GWEN_XMLNode_FindNameSpaceByName (const GWEN_XMLNODE *n, const char *s) |
GWENHYWFAR_API GWEN_XMLNODE_NAMESPACE * | GWEN_XMLNode_FindNameSpaceByUrl (const GWEN_XMLNODE *n, const char *s) |
GWENHYWFAR_API GWEN_XMLNODE * | GWEN_XMLNode_fromString (const char *s, int len, uint32_t flags) |
GWENHYWFAR_API GWEN_XMLNODE_NAMESPACE_LIST * | GWEN_XMLNode_GetNameSpaces (const GWEN_XMLNODE *n) |
GWENHYWFAR_API int | GWEN_XMLNode_Globalize (GWEN_XMLNODE *n) |
GWENHYWFAR_API int | GWEN_XMLNode_GlobalizeWithList (GWEN_XMLNODE *n, GWEN_XMLNODE_NAMESPACE_LIST *l, uint32_t *pLastId) |
GWENHYWFAR_API int | GWEN_XMLNode_NormalizeNameSpaces (GWEN_XMLNODE *n) |
GWENHYWFAR_API int | GWEN_XMLNode_toBuffer (const GWEN_XMLNODE *n, GWEN_BUFFER *buf, uint32_t flags) |
GWENHYWFAR_API int | GWEN_XMLNode_WriteFile (const GWEN_XMLNODE *n, const char *fname, uint32_t flags) |
GWENHYWFAR_API int | GWEN_XMLNode_WriteToStream (const GWEN_XMLNODE *n, GWEN_XML_CONTEXT *ctx, GWEN_IO_LAYER *io) |
Managing Nodes | |
GWENHYWFAR_API void | GWEN_XMLNode_AddChild (GWEN_XMLNODE *n, GWEN_XMLNODE *child) |
GWENHYWFAR_API void | GWEN_XMLNode_AddChildrenOnly (GWEN_XMLNODE *n, GWEN_XMLNODE *nn, int copythem) |
GWENHYWFAR_API GWEN_XMLNODE * | GWEN_XMLNode_FindNode (const GWEN_XMLNODE *n, GWEN_XMLNODE_TYPE t, const char *data) |
GWENHYWFAR_API void | GWEN_XMLNode_RemoveChildren (GWEN_XMLNODE *n) |
GWENHYWFAR_API void | GWEN_XMLNode_UnlinkChild (GWEN_XMLNODE *n, GWEN_XMLNODE *child) |
Managing Headers | |
Headers are special tags in XML files which describe the document (such as <?xml?> or <!DOCTYPE>). If the flag GWEN_XML_FLAGS_HANDLE_HEADERS is on upon reading of files these special toplevel tags are added to the current node's header list instead of the normal children node list. If the same flag is given when writing files the header tags of the given root node are written to the output stream before its children.
Header nodes are identified as nodes whose name begins with '?' or '!'. | |
GWENHYWFAR_API void | GWEN_XMLNode_AddHeader (GWEN_XMLNODE *root, GWEN_XMLNODE *nh) |
GWENHYWFAR_API void | GWEN_XMLNode_ClearHeaders (GWEN_XMLNODE *root) |
GWENHYWFAR_API void | GWEN_XMLNode_DelHeader (GWEN_XMLNODE *root, GWEN_XMLNODE *nh) |
GWENHYWFAR_API GWEN_XMLNODE * | GWEN_XMLNode_GetHeader (const GWEN_XMLNODE *n) |
Managing Properties/Attributes | |
A property (in XML notation this is called attribute) is given within a tag (in XML notation this is called element), like in this example:
<tag property="1" /> | |
GWENHYWFAR_API void | GWEN_XMLNode_CopyProperties (GWEN_XMLNODE *tn, const GWEN_XMLNODE *sn, int overwrite) |
GWENHYWFAR_API const char * | GWEN_XMLNode_GetProperty (const GWEN_XMLNODE *n, const char *name, const char *defaultValue) |
GWENHYWFAR_API void | GWEN_XMLNode_SetProperty (GWEN_XMLNODE *n, const char *name, const char *value) |
Usage Counter | |
The usage counter of a node is only used by applications, not by Gwenhywfar itself. So if the application does not set this counter it will always be zero.
An application could use this counter to check whether a given node is still in use by some parts of the application in order to free unused nodes. | |
GWENHYWFAR_API void | GWEN_XMLNode_DecUsage (GWEN_XMLNODE *n) |
GWENHYWFAR_API uint32_t | GWEN_XMLNode_GetUsage (const GWEN_XMLNODE *n) |
GWENHYWFAR_API void | GWEN_XMLNode_IncUsage (GWEN_XMLNODE *n) |
Debugging | |
GWENHYWFAR_API void | GWEN_XMLNode_Dump (const GWEN_XMLNODE *n, FILE *f, int ind) |
Constructors and Destructors | |
GWENHYWFAR_API GWEN_XMLNODE * | GWEN_XMLNode_dup (const GWEN_XMLNODE *n) |
GWENHYWFAR_API void | GWEN_XMLNode_free (GWEN_XMLNODE *n) |
GWENHYWFAR_API void | GWEN_XMLNode_freeAll (GWEN_XMLNODE *n) |
GWENHYWFAR_API GWEN_XMLNODE * | GWEN_XMLNode_new (GWEN_XMLNODE_TYPE t, const char *data) |
Iterating Through an XML Tree | |
GWENHYWFAR_API GWEN_XMLNODE * | GWEN_XMLNode_FindFirstTag (const GWEN_XMLNODE *n, const char *tname, const char *pname, const char *pvalue) |
GWENHYWFAR_API GWEN_XMLNODE * | GWEN_XMLNode_FindNextTag (const GWEN_XMLNODE *n, const char *tname, const char *pname, const char *pvalue) |
GWENHYWFAR_API GWEN_XMLNODE * | GWEN_XMLNode_GetChild (const GWEN_XMLNODE *n) |
GWENHYWFAR_API GWEN_XMLNODE * | GWEN_XMLNode_GetFirstData (const GWEN_XMLNODE *n) |
GWENHYWFAR_API GWEN_XMLNODE * | GWEN_XMLNode_GetFirstTag (const GWEN_XMLNODE *n) |
GWENHYWFAR_API GWEN_XMLNODE * | GWEN_XMLNode_GetNextData (const GWEN_XMLNODE *n) |
GWENHYWFAR_API GWEN_XMLNODE * | GWEN_XMLNode_GetNextTag (const GWEN_XMLNODE *n) |
GWENHYWFAR_API GWEN_XMLNODE * | GWEN_XMLNode_GetNodeByXPath (GWEN_XMLNODE *n, const char *path, uint32_t flags) |
GWENHYWFAR_API GWEN_XMLNODE * | GWEN_XMLNode_GetParent (const GWEN_XMLNODE *n) |
GWENHYWFAR_API int | GWEN_XMLNode_GetXPath (const GWEN_XMLNODE *n1, const GWEN_XMLNODE *n2, GWEN_BUFFER *nbuf) |
GWENHYWFAR_API int | GWEN_XMLNode_IsChildOf (const GWEN_XMLNODE *parent, const GWEN_XMLNODE *child) |
GWENHYWFAR_API GWEN_XMLNODE * | GWEN_XMLNode_Next (const GWEN_XMLNODE *n) |
Handling Tags As Variables | |
These functions look for a tag, read their first data element and return it as if it was a DB variable. This simplifies access to simple tags containing simple data tags only. E.g. if your XML structure is this: <test> <X> 15 </X> <Y> 10 </Y> </test> x=GWEN_XMLNode_GetIntValue(testNode, "X", 0); | |
GWENHYWFAR_API const char * | GWEN_XMLNode_GetCharValue (const GWEN_XMLNODE *n, const char *name, const char *defValue) |
GWENHYWFAR_API int | GWEN_XMLNode_GetIntValue (const GWEN_XMLNODE *n, const char *name, int defValue) |
GWENHYWFAR_API const char * | GWEN_XMLNode_GetLocalizedCharValue (const GWEN_XMLNODE *n, const char *name, const char *defValue) |
GWENHYWFAR_API void | GWEN_XMLNode_SetCharValue (GWEN_XMLNODE *n, const char *name, const char *value) |
GWENHYWFAR_API void | GWEN_XMLNode_SetIntValue (GWEN_XMLNODE *n, const char *name, int value) |
Type And Data | |
GWENHYWFAR_API const char * | GWEN_XMLNode_GetData (const GWEN_XMLNODE *n) |
GWENHYWFAR_API GWEN_XMLNODE_TYPE | GWEN_XMLNode_GetType (const GWEN_XMLNODE *n) |
GWENHYWFAR_API void | GWEN_XMLNode_SetData (GWEN_XMLNODE *n, const char *data) |
GWENHYWFAR_API GWEN_XMLNODE_NAMESPACE* GWEN_XMLNode_NameSpace_dup | ( | const GWEN_XMLNODE_NAMESPACE * | ns | ) |
Definition at line 1666 of file xml.c.
References GWEN_XMLNode_NameSpace_new().
Referenced by GWEN_XMLNode_AddNameSpace(), and GWEN_XMLNode_dup().
GWENHYWFAR_API void GWEN_XMLNode_NameSpace_free | ( | GWEN_XMLNODE_NAMESPACE * | ns | ) |
Definition at line 1655 of file xml.c.
References GWEN_FREE_OBJECT, and GWEN_LIST_FINI.
Referenced by GWEN_XmlCtxStore_AddAttr().
GWENHYWFAR_API const char* GWEN_XMLNode_NameSpace_GetName | ( | const GWEN_XMLNODE_NAMESPACE * | ns | ) |
Definition at line 1676 of file xml.c.
Referenced by GWEN_XMLGL__GetNameSpaceByPrefix(), GWEN_XMLGL__TranslateName(), GWEN_XMLNode__WriteToStream(), and GWEN_XMLNode_FindNameSpaceByName().
GWENHYWFAR_API const char* GWEN_XMLNode_NameSpace_GetUrl | ( | const GWEN_XMLNODE_NAMESPACE * | ns | ) |
Definition at line 1683 of file xml.c.
Referenced by GWEN_XMLGL__FindNameSpaceByUrl(), GWEN_XMLGL__SampleNameSpaces(), GWEN_XMLGL__TranslateName(), GWEN_XMLNode__WriteToStream(), and GWEN_XMLNode_FindNameSpaceByUrl().
GWENHYWFAR_API GWEN_XMLNODE_NAMESPACE* GWEN_XMLNode_NameSpace_new | ( | const char * | name, | |
const char * | url | |||
) |
Definition at line 1638 of file xml.c.
References GWEN_LIST_INIT, and GWEN_NEW_OBJECT.
Referenced by GWEN_XmlCtxStore_AddAttr(), GWEN_XMLGL__SampleNameSpaces(), and GWEN_XMLNode_NameSpace_dup().