⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 cxml.h

📁 一个简单的在unix 处理xml解析的程序。程序流程简单功能清晰。对想自已写xml处理程序的应有一定的帮助
💻 H
字号:
#ifndef __CXML_HEADER__
#define __CXML_HEADER__

    #include "CType.h"
    #include "CTree.h"

    #define NOLANG  0x00
    #define GB2312  0x01
    #define UTF8    0x02
    #define UTF16   0x04

    #ifndef STDCALL
        #ifndef _WIN32
        #define STDCALL
        #else
        #define STDCALL __stdcall
        #endif
    #endif

    /*---------------------------------------------------------------------*/
    /*定义XML规范的数据*/
    #define XML_NAME_LEN 32         /*节点名及属性名的长度*/
    #define XML_PROP_LEN 64         /*定义属性值的长度*/
    #define XML_PATH_LEN 256        /*路径的长度*/
    #define XML_MAX_PATH 1024       /*路径的最大长度*/
    #define XML_DATA_LEN 2048       /*节点值的长度*/

    /*定义的XML操作模式     插入模式*/
    #define XML_AUTOGROW    0x01    /*节点自动增长模式*/
    #define XML_UNIQNAME    0x02    /*唯一节点模式*/
    #define XML_LEADGROW    0x05    /*尾节点的父节点增长模式*/
    #define XML_BASEGROW    0x09    /*首节点增长模式*/
    /*XML的定位模式,在插入时也可以使用*/
    #define XML_LOCFIRST    0x10    /*定位第一次出现*/
    #define XML_LOCLAST     0x20    /*定位最后一次出现*/

    /*---------------------------------------------------------------------*/
    /*数据结构的定义*/
    /*定义XML节点的属性结构*/
    typedef struct _PROPERTYSTRUCT_tag {
        char szName[XML_NAME_LEN + 1];
        char szData[XML_PROP_LEN + 1];
    } PROPER, *PPROPER;
    typedef const PROPER CPROPER, *PCPROPER;

    /*定义XML节点属性信息的结构,此结构包含属性信息的全部内容*/
    typedef struct _XMLNODEPROPERTY_tag {
        BYTE nCount;
        PPROPER pVal; 
    } NODEPROPERTY, *PNODEPROPERTY;
    typedef const NODEPROPERTY CNODEPROPERTY, *PCNODEPROPERTY;

    /*定义XML结构*/
    typedef struct _XMLSTRUCT_tag {
        UINT nMaxLen;
        UINT nLen;
        TREESTRUCT nTree;
    } XMLSTRUCT, *PXMLSTRUCT;
    typedef const XMLSTRUCT CXMLSTRUCT, *PCXMLSTRUCT;

    /*定义XML节点结构*/
    typedef struct _XMLNODESTRUCT_tag {
        char szName[XML_NAME_LEN + 1];
        NODEPROPERTY nProperty;
        LPSTR pszData;
    } XMLNODE, *PXMLNODE;
    typedef const XMLNODE CXMLNODE, *PCXMLNODE;

    /*---------------------------------------------------------------------*/
    #ifdef __cplusplus
    extern "C" {
    #endif

    /*导出XML的函数,以“XML_开头”,此类函数中,路径不应该包括根节点名*/
    RESULT STDCALL XML_AllocProperty( IN OUT PNODEPROPERTY pProp, IN UINT nPropertyCount );
    RESULT STDCALL XML_FreeProperty( IN OUT PNODEPROPERTY pProp );
    RESULT STDCALL XML_Create( IN OUT PXMLSTRUCT pXml, IN LPCSTR pszName, IN LPCSTR pszData, IN PCNODEPROPERTY pProp );
    RESULT STDCALL XML_Delete( IN OUT PXMLSTRUCT pXml );
    RESULT STDCALL XML_DelNodeByPos( IN OUT PXMLSTRUCT pXml, IN POS nPos );
    RESULT STDCALL XML_DeleteNode( IN OUT PXMLSTRUCT pXml, IN LPCSTR pszPath );

    /*根节点的操作函数*/
    RESULT STDCALL XML_SetRootName( IN OUT PXMLSTRUCT pXml, IN LPCSTR pszName );
    RESULT STDCALL XML_GetRootName( IN PCXMLSTRUCT pXml, IN OUT LPSTR pszName, IN OUT UINT *pnNameLen );
    RESULT STDCALL XML_SetRootProperty( IN OUT PXMLSTRUCT pXml, IN PCNODEPROPERTY pProp );
    RESULT STDCALL XML_GetRootProperty( IN PCXMLSTRUCT pXml, OUT PNODEPROPERTY pProp );
    RESULT STDCALL XML_InsertRoot( IN OUT PXMLSTRUCT pXml, IN LPCSTR pszName, IN LPCSTR pszData, IN PCNODEPROPERTY pProp );

    /*XML操作函数*/
    RESULT STDCALL XML_LocateNode( IN PCXMLSTRUCT pXml, IN OUT PPOS pPos, IN LPCSTR pszPath );
    RESULT STDCALL XML_Locate( IN PXMLSTRUCT pXml, IN OUT PPOS pPos, IN LPCSTR pszPath, IN UINT nMode );
    RESULT STDCALL XML_LocateNext( IN PCXMLSTRUCT pXml, IN OUT PPOS pPos );
    RESULT STDCALL XML_LocatePrior( IN PCXMLSTRUCT pXml, IN OUT PPOS pPos );
    RESULT STDCALL XML_LocateNextTwin( IN PCXMLSTRUCT pXml, IN OUT PPOS pPos );
    RESULT STDCALL XML_LocatePriorTwin( IN PCXMLSTRUCT pXml, IN OUT PPOS pPos );
    RESULT STDCALL XML_InsertNode( IN OUT PXMLSTRUCT pXml, IN LPCSTR pszPath, IN LPCSTR pszData, IN PCNODEPROPERTY pProp, IN UINT nMode );
    RESULT STDCALL XML_InsertChildHead( IN OUT PXMLSTRUCT pXml, IN POS nPos, IN LPCSTR pszName, IN LPCSTR pszData, IN PCNODEPROPERTY pProp );
    RESULT STDCALL XML_InsertChildTail( IN OUT PXMLSTRUCT pXml, IN POS nPos, IN LPCSTR pszName, IN LPCSTR pszData, IN PCNODEPROPERTY pProp );
    RESULT STDCALL XML_InsertPrior( IN OUT PXMLSTRUCT pXml, IN POS nPos, IN LPCSTR pszName, IN LPCSTR pszData, IN PCNODEPROPERTY pProp );
    RESULT STDCALL XML_InsertNext( IN OUT PXMLSTRUCT pXml, IN POS nPos, IN LPCSTR pszName, IN LPCSTR pszData, IN PCNODEPROPERTY pProp );
    RESULT STDCALL XML_SetInfoByPos( IN OUT PXMLSTRUCT pXml, IN POS nPos, IN LPCSTR pszName, IN LPCSTR pszData );
    RESULT STDCALL XML_GetInfoByPos( IN PCXMLSTRUCT pXml, IN POS nPos, OUT LPSTR pszName, IN UINT nNameSize, OUT LPSTR pszData, IN UINT nDataSize );
    RESULT STDCALL XML_GetNextInfo( IN PCXMLSTRUCT pXml, IN OUT PPOS pPos, OUT LPSTR pszName, IN UINT nNameSize, OUT LPSTR pszData, IN UINT nDataSize );
    RESULT STDCALL XML_SetPropertyByPos( IN OUT PXMLSTRUCT pXml, IN POS nPos, IN PCNODEPROPERTY pProp );
    RESULT STDCALL XML_GetPropertyByPos( IN PCXMLSTRUCT pXml, IN POS nPos, OUT PNODEPROPERTY pProp );
    RESULT STDCALL XML_SetVal( IN OUT PXMLSTRUCT pXml, IN LPCSTR pszPath, IN LPCSTR pszData );
    RESULT STDCALL XML_GetVal( IN PCXMLSTRUCT pXml, IN LPCSTR pszPath, OUT LPSTR pszData, IN UINT nDataSize, OUT PPOS pPos );
    RESULT STDCALL XML_SetProperty( IN OUT PXMLSTRUCT pXml, IN LPCSTR pszPath, IN PCNODEPROPERTY pProp );
    RESULT STDCALL XML_GetProperty( IN PCXMLSTRUCT pXml, IN LPCSTR pszPath, OUT PNODEPROPERTY pProp, OUT PPOS pPos );
    RESULT STDCALL XML_GetNextVal( IN PCXMLSTRUCT pXml, IN OUT PPOS pPos, OUT LPSTR pszData, IN UINT nDataSize );
    RESULT STDCALL XML_GetNextProperty( IN PCXMLSTRUCT pXml, IN OUT PPOS pPos, OUT PNODEPROPERTY pProp );
    RESULT STDCALL XML_GetPriorVal( IN PCXMLSTRUCT pXml, IN OUT PPOS pPos, OUT LPSTR pszData, IN UINT nDataSize );
    RESULT STDCALL XML_GetPriorProperty( IN PCXMLSTRUCT pXml, IN OUT PPOS pPos, OUT PNODEPROPERTY pProp );
    RESULT STDCALL XML_ExportNode( IN PCXMLSTRUCT pXml, IN POS nPos, IN UINT nLevel, IN BOOL bShort, OUT LPSTR pszMsg, OUT UINT *pnLen );
    RESULT STDCALL XML_Export( IN PCXMLSTRUCT pXml, IN BOOL bShort, OUT LPSTR pszXMLMsg, IN OUT UINT *pnSize );
    RESULT STDCALL XML_ExportToFile( IN PCXMLSTRUCT pXml, IN LPCSTR pszFile, IN BOOL bShort, IN BOOL bLangInfo );
    RESULT STDCALL XML_ImportNode( IN PXMLSTRUCT pXml, IN POS nPos, IN LPCSTR pszMsg, IN UINT nMsgLen );
    RESULT STDCALL XML_Import( IN PXMLSTRUCT pXml, IN LPCSTR pszMsg );
    RESULT STDCALL XML_ImportFromFile( IN PXMLSTRUCT pXml, IN LPCSTR pszFile );

    UINT   STDCALL XML_GetLen( IN PCXMLSTRUCT pXml );
    UINT   STDCALL XML_GetMaxLen( IN PCXMLSTRUCT pXml );
    UINT   STDCALL XML_SetMaxLen( IN PXMLSTRUCT pXml, UINT nNewLen );

    /*---------------------------------------------------------------------*/
    /*2003-05-19 新增加的函数*/
    RESULT STDCALL XML_LocateParent( IN PCXMLSTRUCT pXml, IN OUT PPOS pPos );
    RESULT STDCALL XML_LocateSubNode( IN PCXMLSTRUCT pXml, IN POS nPos, IN LPCSTR pszPath, IN UINT nMode, OUT PPOS pSubPos );
    RESULT STDCALL XML_GetNodePath( IN PCXMLSTRUCT pXml, IN POS nPos, OUT LPSTR pszPath, IN OUT UINT *pnLen );
    RESULT STDCALL XML_GetSubVal( IN PCXMLSTRUCT pXml, IN POS nPos, IN LPCSTR pszPath, OUT LPSTR pszData, IN UINT nDataSize, OUT PPOS pSubPos );
    RESULT STDCALL XML_SetSubVal( IN PXMLSTRUCT pXml, IN POS nPos, IN LPCSTR pszPath, IN LPCSTR pszData );

    /*---------------------------------------------------------------------*/
    /*2003-12-30 新增加的函数*/
    RESULT STDCALL XML_ExportExt( IN PCXMLSTRUCT pXml, IN BOOL bShort, IN BOOL bLangInfo, OUT LPSTR pszXMLMsg, IN OUT UINT *pnSize );
    /*---------------------------------------------------------------------*/
    /*2004-01-09 新增加的函数*/
    RESULT STDCALL XML_GetNameByPos( IN PCXMLSTRUCT pXml, IN POS nPos, OUT LPSTR pszName, IN UINT nNameSize );
    RESULT STDCALL XML_GetValByPos( IN PCXMLSTRUCT pXml, IN POS nPos, OUT LPSTR pszData, IN UINT nDataSize );
    RESULT STDCALL XML_SetNameByPos( IN PXMLSTRUCT pXml, IN POS nPos, IN LPCSTR pszName );
    RESULT STDCALL XML_SetValByPos( IN PXMLSTRUCT pXml, IN POS nPos, IN LPCSTR pszData );
    
    /*-------------------------------------------------------------------------*/
    #ifdef __cplusplus
    }
    #endif

#endif

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -