最近我需要用vc6.0结合sax2来 解析 xml文件,看了半天msdn,还是摸不着头脑,各位大虾能不能教教我,最好带有例子.
see
MSXML SAX C++ Samples
http://
www
.perfectxml.com/Articles/MSXML/September02.asp
/* This is simple demonstration of how to use expat. This program
reads an XML document from standard input and writes a line with the
name of each element to standard output indenting child elements by
one tab stop more than their parent element. */
#include <stdio.h>
#include <string.h>
#include "xmlparse.h"
void startElement(void *userData, const char *name, const char **atts)
{
int i;
printf("startElement:");
puts(name);
for(i=0;atts[i];i+=2)
{
printf("%s='%s'",atts[i],atts[i+1]);
printf("/n");
}
}
void endElement(void *userData, const char *name)
{
printf("endElement:");
puts(name);
}
void CharacterData(void *userData,const char *s,int len)
{
int i=0;
printf("ÄÚÈÝ:");
if(len!=0)
{
printf("%d/n",len);
for(i=0;i<len;i++)
{
putchar(*(s+i));
if(i==len-1)printf("/n");
}
}
}
#define BUFLEN 1024
int main()
{
char buf[BUFLEN]="<stream:stream to=/"202.197.118.122/" xmlns=/"jabber:client/" xmlns:stream=/"http://etherx.jabber.org/streams/"><first></first><second><three>who am I?</three></second></stream:stream>";
XML_Parser parser = XML_ParserCreate(NULL);
int len=0;
int depth = 0;
int done=0;
XML_SetUserData(parser, &depth);
XML_SetElementHandler(parser, startElement, endElement);
XML_SetCharacterDataHandler(parser,CharacterData);
if (!XML_Parse(parser, buf, strlen(buf), 1)) {
fprintf(stderr,
"%s at line %d/n",
XML_ErrorString(XML_GetErrorCode(parser)),
XML_GetCurrentLineNumber(parser));
return 1;
}
XML_ParserFree(parser);
return 0;
}
用的expat解析器
需下载