📄 wbxmlelm.c
字号:
/* Find last element */
while ((pTemp->pNextElement)!=NULL)
{
pTemp=(pTemp->pNextElement);
}
/* Add element last to list */
pTemp->pNextElement=*ppContent;
}
*ppContent=NULL;
}
/*========================================================================
XML_GetContent
==========================================================================*/
pELEMENTTYPE XML_GetContent (pELEMENTTYPE pElement)
{
return ((pCONTENTELEMENT) (pElement))->pContent;
}
/*========================================================================
XML_CreateInlineText
==========================================================================*/
pELEMENTTYPE XML_CreateInlineText (WCHAR** ppwchString)
{
/* Check if data defined */
if ((ppwchString!=NULL)&&(*ppwchString!=NULL))
{
/* Create element */
pI_TEXTELEMENT pElement=NEWSTRUCT(I_TEXTELEMENT);
#ifndef HAS_SETJMP
if (pElement!=NULL)
{
#endif
/* Store attributes */
pElement->iType=Type_Inline_Text;
pElement->pNextElement=NULL;
pElement->pwchTextData=*ppwchString;
*ppwchString=NULL;
#ifndef HAS_SETJMP
}
else
{
/* Delete string */
DEALLOC (ppwchString);
}
#endif
/* Cast to super type and return */
return (pELEMENTTYPE) pElement;
}
return NULL;
}
/*========================================================================
XML_CreateTableText
==========================================================================*/
pELEMENTTYPE XML_CreateTableText (UINT32 iTableRef)
{
/* Create element */
pT_TEXTELEMENT pElement=NEWSTRUCT(T_TEXTELEMENT);
#ifndef HAS_SETJMP
if (pElement!=NULL)
{
#endif
/* Store attributes */
pElement->iType=Type_Table_Text;
pElement->pNextElement=NULL;
pElement->iTableRef=iTableRef;
#ifndef HAS_SETJMP
}
#endif
/* Cast to super type and return */
return (pELEMENTTYPE) pElement;
}
/*========================================================================
XML_DeleteText
==========================================================================*/
void XML_DeleteText (pELEMENTTYPE* ppText)
{
if ((ppText!=NULL)&&(*ppText!=NULL))
{
if ((*ppText)->iType==Type_Inline_Text)
{
/* Remove the string */
DEALLOC(& ((pI_TEXTELEMENT)(*ppText))->pwchTextData);
DEALLOC(ppText);
}
else if ((*ppText)->iType==Type_Table_Text)
{
DEALLOC(ppText);
}
}
}
/*========================================================================
XML_CreateExt
==========================================================================*/
pELEMENTTYPE XML_CreateExt (WCHAR** ppwchString, BYTE bType)
{
UINT16 iType=0;
pEXT_ELEMENT pElement=NULL;
/* Check if data defined */
if (ppwchString!=NULL)
{
/* Get type */
switch (bType)
{
case GLOBAL_EXT_I_0:
case GLOBAL_EXT_T_0:
case GLOBAL_EXT_0:
iType=Type_Ext_0;
break;
case GLOBAL_EXT_I_1:
case GLOBAL_EXT_T_1:
case GLOBAL_EXT_1:
iType=Type_Ext_1;
break;
case GLOBAL_EXT_I_2:
case GLOBAL_EXT_T_2:
case GLOBAL_EXT_2:
iType=Type_Ext_2;
break;
default:
return NULL;
}
/* Create element */
pElement=NEWSTRUCT(EXT_ELEMENT);
#ifndef HAS_SETJMP
if (pElement!=NULL)
{
#endif
/* Store attributes */
pElement->iType=iType;
pElement->pNextElement=NULL;
pElement->pwchName=*ppwchString;
*ppwchString=NULL;
#ifndef HAS_SETJMP
}
else
{
/* Delete string */
DEALLOC (ppwchString);
}
#endif
/* Cast to super type and return */
return (pELEMENTTYPE) pElement;
}
return NULL;
}
/*========================================================================
XML_DeleteExt
==========================================================================*/
void XML_DeleteExt (pELEMENTTYPE* ppExt)
{
if ((ppExt!=NULL)&&(*ppExt!=NULL))
{
if( ((*ppExt)->iType==Type_Ext_0) ||
((*ppExt)->iType==Type_Ext_1) ||
((*ppExt)->iType==Type_Ext_2) )
{
/* Remove the string */
DEALLOC(& ((pEXT_ELEMENT)(*ppExt))->pwchName);
DEALLOC(ppExt);
}
}
}
/*========================================================================
XML_CreateEntity
==========================================================================*/
pELEMENTTYPE XML_CreateEntity (UINT32 iEntity)
{
/* Create element */
pENTITY pElement=NEWSTRUCT(ENTITY);
#ifndef HAS_SETJMP
if (pElement!=NULL)
{
#endif
/* Store attributes */
pElement->iType=Type_Entity;
pElement->pNextElement=NULL;
pElement->iEntity=iEntity;
#ifndef HAS_SETJMP
}
#endif
/* Cast to super type and return */
return (pELEMENTTYPE) pElement;
}
/*========================================================================
XML_DeleteEntity
==========================================================================*/
void XML_DeleteEntity (pELEMENTTYPE* ppEntity)
{
if ((ppEntity!=NULL)&&(*ppEntity!=NULL))
{
if ((*ppEntity)->iType==Type_Entity)
{
DEALLOC(ppEntity);
}
}
}
/*========================================================================
XML_CreateOpaque
==========================================================================*/
pELEMENTTYPE XML_CreateOpaque (BYTE** ppbData, UINT32 iLength)
{
/* Check if data defined */
if (ppbData!=NULL)
{
/* Create element */
pXMLOPAQUE pElement=NEWSTRUCT(XMLOPAQUE);
#ifndef HAS_SETJMP
if (pElement!=NULL)
{
#endif
/* Store attributes */
pElement->iType=Type_Opaque;
pElement->pNextElement=NULL;
pElement->iLength=iLength;
pElement->pbData=*ppbData;
*ppbData=NULL;
#ifndef HAS_SETJMP
}
#endif
/* Cast to super type and return */
return (pELEMENTTYPE) pElement;
}
return NULL;
}
/*========================================================================
XML_DeleteOpaque
==========================================================================*/
void XML_DeleteOpaque (pELEMENTTYPE* ppOpaque)
{
if ((ppOpaque!=NULL)&&(*ppOpaque!=NULL))
{
if ((*ppOpaque)->iType==Type_Opaque)
{
/* Delete data */
DEALLOC(& ((pXMLOPAQUE)(*ppOpaque))->pbData);
DEALLOC(ppOpaque);
}
}
}
/*========================================================================
XML_GetNextElement
==========================================================================*/
pELEMENTTYPE XML_GetNextElement (pELEMENTTYPE pElement)
{
if (pElement!=NULL)
{
return pElement->pNextElement;
}
return NULL;
}
/*========================================================================
XML_DeleteElement
==========================================================================*/
void XML_DeleteElement (pELEMENTTYPE* ppElement, pWBXMLDECODESTR pDecStr)
{
if (*ppElement!=NULL)
{
/* Check type */
switch ((*ppElement)->iType)
{
/* Global elements */
case Type_Inline_Text:
case Type_Table_Text:
XML_DeleteText (ppElement);
break;
case Type_Ext_0:
case Type_Ext_1:
case Type_Ext_2:
XML_DeleteExt (ppElement);
break;
case Type_Entity:
XML_DeleteEntity (ppElement);
break;
case Type_Opaque:
XML_DeleteOpaque (ppElement);
break;
case Type_ContentElement:
XML_DeleteElementList(& ((pCONTENTELEMENT) (*ppElement))->pContent, pDecStr);
DEALLOC(ppElement);
break;
/* Application specific elements */
default:
pDecStr->DTD_DeleteElement(pDecStr,ppElement);
break;
}
}
}
/*========================================================================
XML_DeleteElementList
==========================================================================*/
void XML_DeleteElementList (pELEMENTTYPE* ppElement, pWBXMLDECODESTR pDecStr)
{
if (ppElement!=NULL)
{
/* Get first element */
pELEMENTTYPE pTemp=NULL;
/* Delete all elements on this level */
while (*ppElement!=NULL)
{
pTemp=*ppElement;
*ppElement=(*ppElement)->pNextElement;
XML_DeleteElement(&pTemp,pDecStr);
}
}
}
/*========================================================================
XML_AddElementToHead
==========================================================================*/
void XML_AddElementToHead (pELEMENTTYPE* ppElementList, pELEMENTTYPE pElement)
{
if ((pElement!=NULL)&&(ppElementList!=NULL))
{
/* Add first in existing list */
pElement->pNextElement=*ppElementList;
*ppElementList=pElement;
}
}
/*========================================================================
XML_AddElementToEnd
==========================================================================*/
void XML_AddElementToEnd (pELEMENTTYPE* ppElementList, pELEMENTTYPE pElement)
{
if ((pElement!=NULL)&&(ppElementList!=NULL))
{
pElement->pNextElement=NULL;
if (*ppElementList==NULL)
{
/* List is empty */
*ppElementList=pElement;
}
else
{
pELEMENTTYPE pTemp=*ppElementList;
/* Find last element */
while (pTemp->pNextElement!=NULL)
{
pTemp=pTemp->pNextElement;
}
/* Append element to list */
pTemp->pNextElement=pElement;
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -