性能最高最稳定的Xml解析SDK库

 

1   概述

本文档适用于C语言开发人员,文档详细讲述Xml解析器SDK中每个函数的

用法以及源码示例。

 

2    Xml介绍

参考相关文档。

 

3    Xml 解析器SDK技术特点

支持以下功能:

1、支持标准xml语法文档

2、支持注释节点

3、支持解析属性值

4、支持实体引用

 

其他说明:

1、支持任意层次的嵌套

2、支持解析xml文档的大小没有限制

3、解析效率高

4、函数简介易用

5、支持windows、linux、unix等操作系统,支持32位和64位开发平台

6、提供基于c语言的开发SDK

 

4   Xml解析器应用场景

1、需要高效解析xml文档

 

5   定义说明

1、HXMLDOM

   指向一个Xml文档的句柄,即指向Xml文档的指针,定义如下:

   typedef void* HXMLDOM;

 

2、HXMLNODE

   HXMLNODE定义为一个指向Xml节点的指针,定义如下:

    typedef void* HXMLNODE;

 

3、HXMLATTR

    HXMLATTR定义为一个指向Xml属性节点的指针,定义如下:

    typedef void* HXMLATTR;

 

4、根节点

每个Xml文档都有唯一一个根节点,此根节点是内部使用,用于获取用户定义的子节点。根节点是特殊的节点,没有属性和值。

 

5、节点

每个节点拥有名字、值、属性链表和子节点链表。

 

6、头子节点

每个节点拥有的子节点链表的第一个子节点。

 

7、尾子节点

每个节点拥有的子节点链表的最后一个子节点。

 

8、上一节点

相当于当前节点所在的节点链表中的上一个相邻节点

 

9、下一节点

相当于当前节点所在的节点链表中的下一个相邻节点

 

10、节点属性

    属性拥有:属性名字和属性值。

 

12、属性链表

每个节点拥有属性链表,保存当前节点的所有属性。

 

6    Xml解析器SDK功能函数

 

6.1    XmlCreateDom()

 

1、功能说明

此函数用来解析xml文本,执行成功后返回DOM句柄,之后对此DOM的操作都引用此句柄。

 

2、函数原型

int XmlCreateDom(char* sXml, HXMLDOM&hDom);

 

3、参数说明

1)char* sXml

输入参数。是\0结尾的xml字符串。

 

2)HXMLDOM hDom

输出参数。返回非NULL的句柄。

 

4、返回值

执行成功返回0,执行失败时返回非0。

 

5、相关函数

   XmlDestroyDom(HXMLDOM hDom)

 

示例:

 

#include “XmlAPI.h"

 

char* g_sXmlText =

“<PeronInfo>\r\n\

<CardID>133552197410282628</CardID>\r\n\

<Name>zhangsan</Name>\r\n\

<Age>28</Age>\r\n\

<Sex>Male</Sex>\r\n\

</PeronInfo>”;

 

int main(int argc, char* argv[])

{

    int nRet;

HXMLDOM hDom;

nRet = XmlCreateDom(hDom);

if(nRet == 0)

{

    printf(“解析Xml成功”);

}

else

{

    printf(“解析Xml失败”);

}

XmlDestroyDom(hDom);

    return 0;

}

 

6.2  XmlGetErrorStartPos()

1、功能说明

此函数用来销毁DOM,删除后的DOM句柄不能再被引用。

 

2、函数原型

char* XmlGetErrorStartPos(HXMLDOMhDom);

 

3、参数说明

   1)HXMLDOM hDom

      输入参数,hDom是执行XmlCreateDom函数返回的句柄。

 

4、返回值

    当执行XmlCreateDom是由于解析xml失败时,通过此函数返回解析失败时

的位置指针,可以通过此指针判断解析失败的原因。

 

5、相关函数

   XmlCreateDom()

   XmlDestroyDom()

 

#include “XmlAPI.h"

 

char* g_sXmlText =

“<PeronInfo>\r\n\

<CardID>133552197410282628</CardID>\r\n\

<Name>zhangsan</Xame>\r\n\

<Age>28</Age>\r\n\

<Sex>Male</Sex>\r\n\

</PeronInfo>”;

 

int main(int argc, char* argv[])

{

    int nRet;

HXMLDOM hDom;

nRet = XmlCreateDom (hDom);

if(nRet == 0)

{

    printf(“解析Xml成功”);

}

else

{

    printf(“解析Xml失败: %s”, XmlGetErrorStartPos(hDom));

}

XmlDestroyDom(hDom);

    return 0;

}

 

6.3  XmlDestroyDom()

1、功能说明

此函数用来销毁DOM,删除后的DOM句柄不能再被引用。

 

2、函数原型

void XmlDestroyTree(HXMLDOM hDom);

 

3、参数说明

   1)HXMLDOM hDom

      输入参数,hDom是执行XmlCreateDom函数返回的句柄。

 

4、返回值

    无

 

5、相关函数

   XmlCreateDom()

 

示例1:

 

#include “XmlAPI.h"

 

char* g_sXmlText =

“<PeronInfo>\r\n\

<CardID>133552197410282628</CardID>\r\n\

<Name>zhangsan</Name>\r\n\

<Age>28</Age>\r\n\

<Sex>Male</Sex>\r\n\

</PeronInfo>”;

 

int main(int argc, char* argv[])

{

    int nRet;

HXMLDOM hDom;

nRet = XmlCreateDom(hDom);

if(nRet == 0)

{

    printf(“解析Xml成功”);

}

else

{

    printf(“解析Xml失败”);

}

XmlDestroyDom(hDom);

    return 0;

}

 

6.4    XmlGetRoot()

1、功能说明

此函数用来获取DOM的根节点,根节点是访问DOM的入口,根节点是特殊节点,没有节点名字,没有属性列表,没有父节点,只有子节点链表。

 

2、函数原型

HXMLNODE XmlGetRoot(HXMLDOM hDom);

 

3、参数说明

   1)HXMLDOM hDom

      输入参数,hDom是执行XmlCreateDom函数返回的句柄。

 

4、返回值

返回非NULL的xml节点句柄。

 

5、相关函数  

XmlCreateDom()

 

示例1:

 

#include “XmlAPI.h"

 

char* g_sXmlText =

“<PeronInfo>\r\n\

<CardID>133552197410282628</CardID>\r\n\

<Name>zhangsan</Name>\r\n\

<Age>28</Age>\r\n\

<Sex>Male</Sex>\r\n\

</PeronInfo>”;

 

int main(int argc, char* argv[])

{

    int nRet;

HXMLDOM hDom;

nRet = XmlCreateDom(hDom);

{

    printf(“解析Xml失败”);

    goto Exit;

}

 

HXMLNODE hRootNode;

hRootNode = XmlGetRoot(hDom);

 

Exit:

XmlDestroyDom(hDom);

    return 0;

}

      

6.5    XmlGetHeadNode()

1、功能说明

此函数用来返回指定Xml节点的头子节点句柄。

 

2、函数原型

HXMLNODE XmlGetHeadNode(HXMLNODE hNode);

 

3、参数说明

   1)HXMLNODE hNode

      输入参数,指定xml节点句柄。

 

4、返回值

    返回hNode节点头子节点的句柄。如果hNode没有子节点返回NULL,否则返

回非NULL的句柄。

  

5、相关函数  

XmlGetTailNode()

XmlGetNextNode()

XmlGetPrevNode()

 

示例1:

功能:

 

#include “XmlAPI.h"

 

char* g_sXmlText =

“<PeronInfo>\r\n\

<CardID>133552197410282628</CardID>\r\n\

<Name>zhangsan</Name>\r\n\

<Age>28</Age>\r\n\

<Sex>Male</Sex>\r\n\

</PeronInfo>”;

 

int main(int argc, char* argv[])

{

    int nRet;

HXMLDOM hDom;

nRet = XmlCreateDom(hDom);

{

    printf(“解析Xml失败”);

    goto Exit;

}

 

HXMLNODE hRootNode;

hRootNode = XmlGetRoot(hDom);

 

HXMLNODE hNode;

hNode = XmlGetHeadNode(hRootNode);

 

char* sName;

sName = XmlGetNodeName(hNode);

printf(“%s”, sName);

 

Exit:

XmlDestroyDom(hDom);

    return 0;

}

      

6.6    XmlGetNextNode()

1、功能说明

此函数用来返回指定节点的下一个节点,这两个节点拥有同一个父节点。

 

2、函数原型

HXMLNODE XmlGetNextNode(HXMLNODE hNode);

 

3、参数说明

   1)HXMLNODE hNode

      输入参数,hNode为指定的当前节点。

 

4、返回值

    返回节点句柄,如果当前节点已经是最后的尾节点则返回NULL,否则返回非

NULL的句柄。

  

5、相关函数  

XmlGetHeadNode()

XmlGetPrevNode()

XmlGetTailNode()

 

示例:

 

char* g_sXmlText =

“<PeronInfo>\r\n\

<CardID>133552197410282628</CardID>\r\n\

<Name>zhangsan</Name>\r\n\

<Age>28</Age>\r\n\

<Sex>Male</Sex>\r\n\

</PeronInfo>”;

 

int main(int argc, char* argv[])

{

    int nRet;

HXMLDOM hDom;

nRet = XmlCreateDom(hDom);

{

    printf(“解析Xml失败”);

    goto Exit;

}

 

HXMLNODE hRootNode;

hRootNode = XmlGetRoot(hDom);

 

HXMLNODE hNodeA;

hNodeA = XmlGetHeadNode(hRootNode);

 

HXMLNODE hNodeB;

hNodeB = XmlGetHeadNode(hNodeA);

while(nNodeB != NULL)

{

    printf(“%s”, XmlGetNodeName(nNodeB));

    hNodeB = XmlGetNextNode(hNodeB);

}

 

Exit:

XmlDestroyDom(hDom);

    return 0;

}

 

6.7    XmlGetPrevNode()

1、功能说明

此函数用来返回指定节点的上一个节点,这两个节点拥有同一个父节点。

 

2、函数原型

HXMLNODE XmlGetPrevNode(HXMLNODE hNode);

 

3、参数说明

   1)HXMLNODE hNode

      输入参数,hNode为指定的当前节点。

 

4、返回值

    返回节点句柄,如果当前节点已经是头节点则返回NULL,否则返回非。

NULL的句柄。

  

5、相关函数  

XmlGetHeadNode()

XmlGetNextNode()

XmlGetTailNode()

 

示例:参考AvlGetHeadPosition

 

char* g_sXmlText =

“<PeronInfo>\r\n\

<CardID>133552197410282628</CardID>\r\n\

<Name>zhangsan</Name>\r\n\

<Age>28</Age>\r\n\

<Sex>Male</Sex>\r\n\

</PeronInfo>”;

 

int main(int argc, char* argv[])

{

    int nRet;

HXMLDOM hDom;

nRet = XmlCreateDom(hDom);

{

    printf(“解析Xml失败”);

    goto Exit;

}

 

HXMLNODE hRootNode;

hRootNode = XmlGetRoot(hDom);

 

HXMLNODE hNodeA;

hNodeA = XmlGetHeadNode(hRootNode);

 

HXMLNODE hNodeB;

hNodeB = XmlGetTailNode(hNodeA);

while(nNodeB != NULL)

{

    printf(“%s”, XmlGetNodeName(nNodeB));

    hNodeB = XmlGetPrevNode(hNodeB);

}

 

Exit:

XmlDestroyDom(hDom);

    return 0;

}

 

6.8    XmlGetTailNode()

1、功能说明

此函数用来返回指定Xml节点的头子节点句柄。

 

2、函数原型

HXMLNODE XmlGetHeadNode(HXMLNODE hNode);

 

3、参数说明

   1)HXMLNODE hNode

      输入参数,指定xml节点句柄。

 

4、返回值

    返回hNode节点头子节点的句柄。如果hNode没有子节点返回NULL,否则返

回非NULL的句柄。

  

5、相关函数  

XmlGetHeadNode()

XmlGetNextNode()

XmlGetPrevNode()

 

6.9    XmlGetChildNode()

1、功能说明

此函数指定名字的子节点,支持返回多个具有相同名字的子节点。

 

2、函数原型

int XmlGetChildNode(HXMLNODE hNode,char*sName, int nMaxChild,

HXMLNODE hChildNode[]);

 

3、参数说明

   1)HXMLNODE hNode

      输入参数,指定的节点句柄。

 

2) char* sName

  输出参数,要获取子节点的名字,注意区分大小写。

 

3) int nMaxChild

  输入参数, 要获取子节点的最大数量。

 

4) HXMLNODE hChildNode[]

  输入(出)参数,接收返回子节点句柄的数组指针,注意,此指针指向的数组元素的数量要大于等于nMaxChild。

 

4、返回值

    返回具有指定名字子节点的数量,该返回值小于等于nMaxChild。

  

5、相关函数  

XmlGetSingleChildNode()

 

示例1:

char* g_sXmlText =

“<PeronInfo>\r\n\

<CardID>133552197410282628</CardID>\r\n\

<Name>zhangsan</Name>\r\n\

<PastName>zhangyi</PastName>\r\n\

<PastName>zhanger</PastName>\r\n\

<PastName>zhangsi</PastName>\r\n\

<PastName>zhangwu</PastName>\r\n\

<PastName>zhangliu</PastName>\r\n\

<PastName>zhangqi</PastName>\r\n\

<Age>28</Age>\r\n\

<Sex>Male</Sex>\r\n\

</PeronInfo>”;

 

int main(int argc, char* argv[])

{

    int nRet;

HXMLDOM hDom;

nRet = XmlCreateDom(hDom);

{

    printf(“解析Xml失败”);

    goto Exit;

}

 

HXMLNODE hRootNode;

hRootNode = XmlGetRoot(hDom);

 

HXMLNODE hNodeA;

hNodeA = XmlGetHeadNode(hRootNode);

 

HXMLNODE hNodeArray[16];

 

int nCount;

nCount = XmlGetChildNode(hNodeA, “PassName”,16, hNodeArray);

int i;

for(i = 0; i < nCount; i++)

{

    printf(“%s”, XmlGetNodeValue(hNodeArray[i]));

}

 

Exit:

XmlDestroyDom(hDom);

    return 0;

}

 

6.10      XmlGetSingleChildNode()

1、功能说明

此函数指定名字的第一个子节点。

 

2、函数原型

HXMLNODE XmlGetChildNode(HXMLNODE hNode,char*sName);

 

3、参数说明

   1)HXMLNODE hNode

      输入参数,指定的节点句柄。

 

2) char* sName

  输出参数,要获取子节点的名字,注意区分大小写。

 

4、返回值

    返回第一个具有指定名字子节点的句柄,如果没有指定名字的节点,返回

    NULL。

  

5、相关函数  

XmlGetChildNode()

 

 

示例1:

char* g_sXmlText =

“<PeronInfo>\r\n\

<CardID>133552197410282628</CardID>\r\n\

<Name>zhangsan</Name>\r\n\

<PastName>zhangyi</PastName>\r\n\

<PastName>zhanger</PastName>\r\n\

<PastName>zhangsi</PastName>\r\n\

<PastName>zhangwu</PastName>\r\n\

<PastName>zhangliu</PastName>\r\n\

<PastName>zhangqi</PastName>\r\n\

<Age>28</Age>\r\n\

<Sex>Male</Sex>\r\n\

</PeronInfo>”;

 

int main(int argc, char* argv[])

{

    int nRet;

HXMLDOM hDom;

nRet = XmlCreateDom(hDom);

{

    printf(“解析Xml失败”);

    goto Exit;

}

 

HXMLNODE hRootNode;

hRootNode = XmlGetRoot(hDom);

 

HXMLNODE hNodeA;

hNodeA = XmlGetHeadNode(hRootNode);

 

HXMLNODE hNodeB;

hNodeB = XmlGetSingleChildNode(hNodeA, “PassName”);

printf(“%s”, XmlGetNodeValue(hNodeB);

 

Exit:

XmlDestroyDom(hDom);

    return 0;

}

 

6.11      XmlGetChildNodeValue()

1、功能说明

此函数返回第一个指定名字的子节点的值。

 

2、函数原型

char* XmlGetChildNodeValue(HXMLNODEhNode,char* sName);

 

3、参数说明

   1)HXMLNODE hNode

      输入参数,指定的节点句柄。

 

2) char* sName

  输出参数,要获取子节点的名字,注意区分大小写。

 

4、返回值

    如果存在指定名字的子节点,返回一个指向字符串的指针;否则返回NULL。

  

5、相关函数  

XmlGetChildNodeValueEx()

 

6.12     XmlGetChildNodeValueEx()

1、功能说明

此函数返回第一个指定名字的子节点的值。

 

2、函数原型

bool XmlGetChildNodeValueEx(HXMLNODEhNode,char* sName,

char* sValue);

 

3、参数说明

   1)HXMLNODE hNode

      输入参数,指定的节点句柄。

 

2) char* sName

  输入参数,要获取子节点的名字,注意区分大小写。

 

3) char*& sValue

    输出参数, 如果存在指定名字的子节点,返回一个指向字符串的指针。

 

 

4、返回值

    如果存在指定名字的子节点返回true, 否则返回false。

  

5、相关函数  

XmlGetChildNodeValueEx()

 

示例:参考AvlGetHeadPosition

 

char* g_sXmlText =

“<PeronInfo>\r\n\

<CardID>133552197410282628</CardID>\r\n\

<Name>zhangsan</Name>\r\n\

<Age>28</Age>\r\n\

<Sex>Male</Sex>\r\n\

</PeronInfo>”;

 

int main(int argc, char* argv[])

{

    int nRet;

HXMLDOM hDom;

nRet = XmlCreateDom(hDom);

{

    printf(“解析Xml失败”);

    goto Exit;

}

 

HXMLNODE hRootNode;

hRootNode = XmlGetRoot(hDom);

 

HXMLNODE hNodeA;

hNodeA = XmlGetHeadNode(hRootNode);

 

printf(“%s”, XmlGetChildNodeValue(“CardID”));

printf(“%s”, XmlGetChildNodeValue(“Name”));

printf(“%s”, XmlGetChildNodeValue(“Age”));

printf(“%s”, XmlGetChildNodeValue(“Sex”));

 

Exit:

XmlDestroyDom(hDom);

    return 0;

}

6.13      XmlGetChildCount()

1、功能说明

此函数返回指定节点的子节点数量。

 

2、函数原型

int XmlGetChildCount(HXMLNODE hNode);

 

3、参数说明

   1)HXMLNODE hNode

      输入参数,指定的节点句柄。

 

4、返回值

    返回子节点的数量,大于等于0。

  

5、相关函数  

XmlGetChildNode()

 

示例:

char* g_sXmlText =

“<PeronInfo>\r\n\

<CardID>133552197410282628</CardID>\r\n\

<Name>zhangsan</Name>\r\n\

<Age>28</Age>\r\n\

<Sex>Male</Sex>\r\n\

</PeronInfo>”;

 

int main(int argc, char* argv[])

{

    int nRet;

HXMLDOM hDom;

nRet = XmlCreateDom(hDom);

{

    printf(“解析Xml失败”);

    goto Exit;

}

 

HXMLNODE hRootNode;

hRootNode = XmlGetRoot(hDom);

 

HXMLNODE hNodeA;

hNodeA = XmlGetHeadNode(hRootNode);

 

printf(“%d”, XmlGetChildCount(hNodeA));

 

Exit:

XmlDestroyDom(hDom);

    return 0;

}

 

6.14      XmlGetParentNode()

1、功能说明

此函数返回指定节点的父节点。

 

2、函数原型

int XmlGetParentNode(HXMLNODE hNode);

 

3、参数说明

   1)HXMLNODE hNode

      输入参数,指定的节点句柄。

 

4、返回值

    返回节点的父节点的句柄,注意只有根节点没有父节点,其他节点都有一个

非NULL的父节点。

  

5、相关函数  

XmlGetChildNode()

 

示例:

char* g_sXmlText =

“<PeronInfo>\r\n\

<CardID>133552197410282628</CardID>\r\n\

<Name>zhangsan</Name>\r\n\

<Age>28</Age>\r\n\

<Sex>Male</Sex>\r\n\

</PeronInfo>”;

 

int main(int argc, char* argv[])

{

    int nRet;

HXMLDOM hDom;

nRet = XmlCreateDom(hDom);

{

    printf(“解析Xml失败”);

    goto Exit;

}

 

HXMLNODE hRootNode;

hRootNode = XmlGetRoot(hDom);

 

HXMLNODE hNodeA;

hNodeA = XmlGetHeadNode(hRootNode);

 

printf(“%s”, XmlGetNodeName(hNodeA));

 

HXMLNODE hNodeB;

hNodeB = XmlGetHeadNode(hNodeA);

 

printf(“%s”, XmlGetNodeName(hNodeB));

 

HXMLNODE hNodeC;

hNodeC = XmlGetParentNode(hNodeB);

 

printf(“%s”, XmlGetNodeName(hNodeC));

 

Exit:

XmlDestroyDom(hDom);

    return 0;

}

 

6.15      XmlGetNodeName()

1、功能说明

此函数用来根据节点句柄获取节点的名字。

 

2、函数原型

char* XmlGetNodeName(HXMLNODE hNode);

 

3、参数说明

   1)HXMLNODE hNode

      输入参数,指定的节点句柄。

 

4、返回值

    返回节点的名字。

  

5、相关函数  

XmlGetNodeValue()

 

示例:

6.16      XmlGetNodeValue()

1、功能说明

此函数用来根据节点句柄获取节点的值。

 

2、函数原型

char* XmlGetNodeValue(HXMLNODEhNode);

 

3、参数说明

   1)HXMLNODE hNode

      输入参数,指定的节点句柄。

 

4、返回值

    返回节点的值。

  

5、相关函数  

      

6.17      XmlGetHeadAttr()

1、功能说明

此函数用来返回指定Xml节点的第一个属性的句柄。

 

2、函数原型

HXMLATTR XmlGetHeadAttr (HXMLNODE hNode);

 

3、参数说明

   1)HXMLNODE hNode

      输入参数,指定xml节点句柄。

 

4、返回值

    返回hNode节点第一个属性的句柄。如果hNode没有属性返回NULL,否则返

回非NULL的句柄。

  

5、相关函数  

XmlGetTailAttr()

XmlGetNextAttr()

XmlGetPrevAttr()

 

 

示例1:

#include “XmlAPI.h"

 

char* g_sXmlText =

“<PeronInfo CardID=\”133552197410282628\” Name=\“zhangsan\”

Age=\”28\” Sex = \“Male\”/>”;

 

int main(int argc, char* argv[])

{

    int nRet;

HXMLDOM hDom;

nRet = XmlCreateDom(hDom);

{

    printf(“解析Xml失败”);

    goto Exit;

}

 

HXMLNODE hRootNode;

hRootNode = XmlGetRoot(hDom);

 

HXMLNODE hNode;

hNode = XmlGetHeadNode(hRootNode);

 

HXMLATTR hXmlAttr;

hXmlAttr = XmlGetHeadAttr(hNode);

 

printf(“%s = %s”, XmlGetAttrName(hXmlAttr), XmlGetAttrValue(hXmlAttr));

Exit:

XmlDestroyDom(hDom);

    return 0;

}

 

6.18      XmlGetTailAttr()

1、功能说明

此函数用来返回指定Xml节点的最后一个属性的句柄。

 

2、函数原型

HXMATTR XmlGetTailAttr (HXMLNODE hNode);

 

3、参数说明

   1)HXMLNODE hNode

      输入参数,指定xml节点句柄。

 

4、返回值

    返回hNode节点最后一个属性的句柄。如果hNode没有属性返回NULL,否则

    返回非NULL的句柄。

  

5、相关函数  

XmlGetHeadAttr()

XmlGetNextAttr()

XmlGetPrevAttr()

 

示例1:

#include “XmlAPI.h"

 

char* g_sXmlText =

“<PeronInfo CardID=\”133552197410282628\” Name=\“zhangsan\”

Age=\”28\” Sex = \“Male\”/>”;

 

int main(int argc, char* argv[])

{

    int nRet;

HXMLDOM hDom;

nRet = XmlCreateDom(hDom);

{

    printf(“解析Xml失败”);

    goto Exit;

}

 

HXMLNODE hRootNode;

hRootNode = XmlGetRoot(hDom);

 

HXMLNODE hNode;

hNode = XmlGetTailNode(hRootNode);

 

HXMLATTR hXmlAttr;

hXmlAttr = XmlGetHeadAttr(hNode);

 

printf(“%s = %s”, XmlGetAttrName(hXmlAttr),XmlGetAttrValue(hXmlAttr));

Exit:

XmlDestroyDom(hDom);

    return 0;

}

 

6.19      XmlGetNextAttr()

1、功能说明

此函数用来返回指定属性节点的下一个属性节点,这两个属性节点拥有同一个Xml节点。

 

2、函数原型

HXMATTR XmlGetNextAttr(HXMATTR hAttr);

 

3、参数说明

   1)HXMLATTR hAttr

      输入参数,hAtrr为指定的当前属性节点。

 

4、返回值

    返回属性的句柄,如果当前属性已经是最后一个属性则返回NULL,否则返回

非NULL的句柄。

  

5、相关函数  

XmlGetHeadAttr()

XmlGetPrevAttr()

XmlGetTailAttr()

 

示例1:

 

#include “XmlAPI.h"

 

char* g_sXmlText =

“<PeronInfo CardID=\”133552197410282628\” Name=\“zhangsan\”

Age=\”28\” Sex = \“Male\”/>”;

 

int main(int argc, char* argv[])

{

    int nRet;

HXMLDOM hDom;

nRet = XmlCreateDom(hDom);

{

    printf(“解析Xml失败”);

    goto Exit;

}

 

HXMLNODE hRootNode;

hRootNode = XmlGetRoot(hDom);

 

HXMLNODE hNode;

hNode = XmlGetHeadNode(hRootNode);

 

HXMLATTR hXmlAttr;

hXmlAttr = XmlGetHeadAttr(hNode);

while(hXmlAttr != NULL)

{

    printf(“%s = %s”, XmlGetAttrName(hXmlAttr),

            XmlGetAttrValue(hXmlAttr));

    hXmlAttr = XmlGetNextAttr(hXmlAttr);

}

 

Exit:

XmlDestroyDom(hDom);

    return 0;

}

6.20      XmlGetPrevAttr()

1、功能说明

此函数用来返回指定属性的上一个属性,这两个属性拥有同一个Xml节点。

 

2、函数原型

HXMATTR XmlGetPrevAttr(HXMATTR hAttr);

 

3、参数说明

   1)HXMLATTR hAttr

      输入参数,hAtrr为指定的当前属性节点。

 

4、返回值

    返回属性的句柄,如果当前属性已经是第一个属性则返回NULL,否则返回

非NULL的句柄。

  

5、相关函数  

XmlGetHeadAttr()

XmlGetNextAttr()

XmlGetTailAttr()

 

示例1:

功能:采用降序遍历avl树中的节点

 

#include “XmlAPI.h"

 

char* g_sXmlText =

“<PeronInfo CardID=\”133552197410282628\” Name=\“zhangsan\”

Age=\”28\” Sex = \“Male\”/>”;

 

int main(int argc, char* argv[])

{

    int nRet;

HXMLDOM hDom;

nRet = XmlCreateDom(g_sXmlText, hDom, true, 1024*8);

if(nRet != 0)

{

    printf(“解析Xml失败”);

    goto Exit;

}

 

HXMLNODE hRootNode;

hRootNode = XmlGetRoot(hDom);

 

HXMLNODE hNode;

hNode = XmlGetHeadNode(hRootNode);

 

HXMLATTR hXmlAttr;

hXmlAttr = XmlGetTailAttr(hNode);

while(hXmlAttr != NULL)

{

    printf(“%s = %s”, XmlGetAttrName(hXmlAttr),

                XmlGetAttrValue(hXmlAttr));

    hXmlAttr = XmlGetPrevAttr(hXmlAttr);

}

 

Exit:

XmlDestroyDom(hDom);

    return 0;

}

 

6.21      XmlGetAttrName()

1、功能说明

此函数用来根据属性句柄获取属性的名字。

 

2、函数原型

char* XmlGetAttrName(HXMLATTR hAttr);

 

3、参数说明

   1)HXMLNODE hNode

      输入参数,指定的节点句柄。

 

4、返回值

    返回节点的名字。

  

5、相关函数  

XmlGetAttrValue()

 

6.22     XmlGetAttrValue()

1、功能说明

此函数用来根据属性句柄获取属性的值。

 

2、函数原型

char* XmlGetAttrValue(HXMLATTRhAttr);

 

3、参数说明

   1)HXMLNODE hNode

      输入参数,指定的节点句柄。

 

4、返回值

    返回属性的值。

  

5、相关函数  

XmlGetAttrName()

 

示例:

功能:根据节点句柄删除节点。

#include "XmlAPI.h"

 

6.23      XmlGetAttrCount()

1、功能说明

此函数返回指定节点的属性的数量。

 

2、函数原型

int XmlGetAttrCount(HXMLNODE hNode);

 

3、参数说明

   1)HXMLNODE hNode

      输入参数,指定的节点句柄。

 

4、返回值

    返回属性的数量,大于等于0。

  

5、相关函数  

XmlGetAttr()

 

示例1:

#include “XmlAPI.h"

 

char* g_sXmlText =

“<PeronInfo CardID=\”133552197410282628\” Name=\“zhangsan\”

Age=\”28\” Sex = \“Male\”/>”;

 

int main(int argc, char* argv[])

{

    int nRet;

HXMLDOM hDom;

nRet = XmlCreateDom(hDom);

{

    printf(“解析Xml失败”);

    goto Exit;

}

 

HXMLNODE hRootNode;

hRootNode = XmlGetRoot(hDom);

 

HXMLNODE hNode;

hNode = XmlGetHeadNode(hRootNode);

 

HXMLATTR hXmlAttr;

hXmlAttr = XmlGetHeadAttr(hNode);

 

printf(“%d”, XmlGetAttrCount(hXmlAttr));

Exit:

XmlDestroyDom(hDom);

    return 0;

}

6.24      XmlGetAttr()

1、功能说明

此函数返回某xml节点指定名字的属性句柄。

 

2、函数原型

HXMLATTR XmlGetAttr(HXMLNODE hNode,char*sName);

 

3、参数说明

   1)HXMLNODE hNode

      输入参数,指定的节点句柄。

 

2) char* sName

  输出参数,要获取属性的名字,注意区分大小写。

 

4、返回值

    返回定名字属性的句柄,如果没有指定名字的属性,返回NULL。

  

5、相关函数  

XmlGetAttrValueByName()

 

#include “XmlAPI.h"

 

char* g_sXmlText =

“<PeronInfo CardID=\”133552197410282628\” Name=\“zhangsan\”

Age=\”28\” Sex = \“Male\”/>”;

 

int main(int argc, char* argv[])

{

    int nRet;

HXMLDOM hDom;

nRet = XmlCreateDom(hDom);

{

    printf(“解析Xml失败”);

    goto Exit;

}

 

HXMLNODE hRootNode;

hRootNode = XmlGetRoot(hDom);

 

HXMLNODE hNode;

hNode = XmlGetHeadNode(hRootNode);

 

HXMLATTR hXmlAttr;

hXmlAttr = XmlGetAttr(hNode,“CardID”);

printf(“%s = %s”, XmlGetAttrName(hXmlAttr),XmlGetAttrValue(hXmlAttr));

 

hXmlAttr = XmlGetAttr(hNode,“Name”);

printf(“%s = %s”, XmlGetAttrName(hXmlAttr),XmlGetAttrValue(hXmlAttr));

 

hXmlAttr = XmlGetAttr(hNode,“Age”);

printf(“%s = %s”, XmlGetAttrName(hXmlAttr),XmlGetAttrValue(hXmlAttr));

 

hXmlAttr = XmlGetAttr(hNode,“Sex”);

printf(“%s = %s”, XmlGetAttrName(hXmlAttr),XmlGetAttrValue(hXmlAttr));

 

Exit:

XmlDestroyDom(hDom);

    return 0;

}

 

6.25      XmlGetAttrValueByName()

1、功能说明

此函数返回某xml节点指定名字的属性的值。

 

2、函数原型

char* XmlGetAttrByName(HXMLNODE hNode,char*sName);

 

3、参数说明

   1)HXMLNODE hNode

      输入参数,指定的节点句柄。

 

2) char* sName

  输出参数,要获取属性的名字,注意区分大小写。

 

4、返回值

    返回定名字属性的值,如果没有指定名字的属性,返回NULL。

  

5、相关函数  

XmlGetAttr()

 

 

#include “XmlAPI.h"

 

char* g_sXmlText =

“<PeronInfo CardID=\”133552197410282628\” Name=\“zhangsan\”

Age=\”28\” Sex = \“Male\”/>”;

 

int main(int argc, char* argv[])

{

    int nRet;

HXMLDOM hDom;

nRet = XmlCreateDom(hDom);

{

    printf(“解析Xml失败”);

    goto Exit;

}

 

HXMLNODE hRootNode;

hRootNode = XmlGetRoot(hDom);

 

HXMLNODE hNode;

hNode = XmlGetHeadNode(hRootNode);

 

printf(“%s”, XmlGetAttrValueByName(hNode,“CardID”);

printf(“%s”, XmlGetAttrValueByName(hNode,“Name”);

printf(“%s”, XmlGetAttrValueByName(hNode,“Age”);

printf(“%s”, XmlGetAttrValueByName(hNode,“Sex”);

 

Exit:

XmlDestroyDom(hDom);

    return 0;

}

 

7   Xml生成器SDK功能函数

 

7.1    XmlCreateDom()

 

1、功能说明

此函数也可以用来xml的DOM,然后导出xml文本。执行成功后返回DOM句柄,之后对此DOM的操作都引用此句柄,。

 

2、函数原型

int XmlCreateDom(char* sXml, boolbParse, bool bUsePage,

 int nPageSize, HXMLDOM& hDom);

 

3、参数说明

1) char* sXml

输入参数。必须是NULL。

 

2) bool bParse

输入参数。必须是false,指明是要生成Xml文档。

 

3) bool bUsePage

输入参数。是否使用页内存分配机制, 默认是true。

 

4) size_t nPageSize

输入参数。页的字节数量, 默认是8K。

 

3)HXMLDOM hDom

输出参数。返回非NULL的句柄。

 

4、返回值

执行成功返回0,执行失败时返回非0。

 

5、相关函数

   XmlDestroyDom(HXMLDOM hDom)

 

 

7.2    XmlCreateNode()

1、功能说明

此函数用来返回指定Xml节点的头子节点句柄。

 

2、函数原型

HXMLNODE XmlCreateNode(HXMLDOMhXmlDom, HXMLNODE hNode,

char* sName, char* sValue);

 

3、参数说明

    1)HXMLDOM hDom

      输入参数,hDom是执行XmlCreateDom函数返回的句柄。

 

2)HXMLNODE hNode

      输入参数,要生成节点的父节点句柄。

 

3)char* sName

      输入参数,指定xml节点的名字。

 

4)char*  sValue

      输入参数,指定xml节点的值。

 

1、sName != NULL&& sValue != NULL,Xml文本为以下形式:

    <Name>zhangsan</Name>

 

2、sName != NULL&& sValue == NULL, 生成的节点下面会有子节点或者是

    <Name/>

   

4、返回值

    返回要生成Xml节点的句柄。

  

5、相关函数  

XmlCreateAttr()

 

示例1:

功能:

      

7.3    XmlCreateAttr()

1、功能说明

此函数用来在某个节点里生成一个属性,同时返回属性的句柄。

 

2、函数原型

HXMLATTR XmlCreateAttr(HXMLDOMhXmlDom, HXMLNODE hNode,

char* sName, char* sValue);

 

3、参数说明

    1)HXMLDOM hDom

      输入参数,hDom是执行XmlCreateDom函数返回的句柄。

 

2)HXMLNODE hNode

      输入参数,要生成属性所属的节点句柄。

 

3)char* sName

      输入参数,指定xml属性的名字。

 

4)char*  sValue

      输入参数,指定xml属性的值。

   

4、返回值

    返回要生成Xml属性的句柄。

  

5、相关函数  

XmlCreateNode()

 

示例1:

功能:

      

7.4    XmlGetText()

 

1、功能说明

此函数用来根据Xml的DOM导出xml文本。

 

2、函数原型

int XmlGetText(HXMLDOM hDom, char*sXml);

 

3、参数说明

1)HXMLDOM hDom

  输入参数,hDom是执行XmlCreateDom函数返回的句柄。

 

2)  char* sXml

输入参数,用来接收导出的Xml文本。

 

4、返回值

执行成功返回0,执行失败时返回非0。

 

5、相关函数

   XmlWriteText()

 

示例:

 

#include “XmlAPI.h"

 

int main(int argc, char* argv[])

HXMLDOM hDom;

XmlCreateDom(NULL, hDom);

 

HXMLNODE hRootNode;

hRootNode = XmlGetRootNode(hDom);

 

HXMLNODE hNode;

hNode = XmlCreateNode(hDom, hRootNode, "PersonInfo", NULL);

XmlCreateAttr(hDom, hNode,"A", "a");

XmlCreateAttr(hDom, hNode,"B", "b");

 

HXMLNODE hSubNode;

hSubNode = XmlCreateNode(hDom, hNode,"name", "wuerdong");

hSubNode = XmlCreateNode(hDom, hNode,"sex", "male");

hSubNode = XmlCreateNode(hDom, hNode, "age","30");

   

char sXml[1024*8];

XmlGetText(hDom, sXml);

 

XmlDestroyDom(hDom);

    return 0;

}

 

7.5    XmlWriteText()

 

1、功能说明

此函数用来根据Xml的DOM导出xml文本,并以回调函数处理导出过程中的Xml文本,回调函数会被多次调用。

 

2、函数原型

int XmlWriteText(HXMLDOM hDom, char*sXml, void* pPara);

 

3、参数说明

1)HXMLDOM hDom

  输入参数,hDom是执行XmlCreateDom函数返回的句柄。

 

3)  void* pPara

输入参数,回调函数。

 

4)  void* pPara

输入参数,回调函数的参数。

 

4、返回值

执行成功返回0,执行失败时返回非0。

 

5、相关函数

   XmlWriteText()

 

示例:

 

#include “XmlAPI.h"

 

bool OnWriteText(char* sXml, void* pPara)

{

    FILE* fp;

    fp = (FILE *)pPara;

    fwrite(sXml, 1,strlen(sXml), fp);

    fflush(fp);

    return true;

}

 

int main(int argc, char* argv[])

FILE* fp;

    fp =fopen("d:\\0.xml", "wb"); 

 

HXMLDOM hDom;

XmlCreateDom(NULL, hDom);

 

HXMLNODE hRootNode;

hRootNode = XmlGetRootNode(hDom);

 

HXMLNODE hNode;

hNode = XmlCreateNode(hDom, hRootNode, "PersonInfo", NULL);

XmlCreateAttr(hDom, hNode,"A", "a");

XmlCreateAttr(hDom, hNode,"B", "b");

 

HXMLNODE hSubNode;

hSubNode = XmlCreateNode(hDom, hNode,"name", "wuerdong");

hSubNode = XmlCreateNode(hDom, hNode,"sex", "male");

hSubNode = XmlCreateNode(hDom, hNode, "age","30");

   

XmlWriteText(hDom, OnWriteText, fp);

fclose(fp);

 

XmlDestroyDom(hDom);

    return 0;

}

 

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值