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

📄 xmlwriter.c

📁 一个简单的pos机程序
💻 C
字号:
/** */extern "C" {#define XMLWRITER_DEBUG 0#include "XmlWriter.h"#include <stdio.h>XmlWriter XmlWriterCreate(){  XmlWriter w = (XmlWriter)malloc(sizeof(XmlWriter_struct));  if (w == NULL)  {    return NULL;  }  w->buf_start = (char *)malloc(BUFFER_BLOCK_SIZE*sizeof(char));  w->buf_ptr   = w->buf_start;  w->size      = BUFFER_BLOCK_SIZE;  w->level     = 0;  w->started   = 0;  w->valued    = 0;  return w;}void XmlWriterFree(XmlWriter w){  if (w->buf_start != NULL)  {    free(w->buf_start);  }  if (w != NULL)  {    free(w);  }}int _GetLength(XmlWriter w){  return (int)(w->buf_ptr - w->buf_start);}void _Resize(XmlWriter w){  int size = w->size;  char *p  = w->buf_start;  p = (char *)realloc(p, size+BUFFER_BLOCK_SIZE);  if (p == NULL)  {    printf("_Resize(): no enough memory\r\n");    return;  }  else  {    w->buf_start = p;    w->buf_ptr = p+size;    w->size = size+BUFFER_BLOCK_SIZE;    return;  }}void Write(XmlWriter w, char *buf){  char *p1 = buf;  while (*p1 != '\0')  {    if (w->size == _GetLength(w))    {      _Resize(w);    }    *w->buf_ptr++ = *p1++;  }  return;}void WriteEscaped(XmlWriter w, const char *buf){  const char *p1 = buf;  char temp;  if (p1)	{		while (*p1 != '\0')		{			if (w->size == _GetLength(w))      {				_Resize(w);      }			else			{				temp = *p1++;				switch (temp)				{				  case '&' :	Write(w, "&amp;");		break;				  case '<' :	Write(w, "&lt;");		  break;				  case '>' :	Write(w, "&gt;");		  break;				  case '\'':	Write(w, "&apos;");	  break;				  case '\"':	Write(w, "&quot;");	  break;				  case '\r':	Write(w, "&#xd;");		break;				  default  :  *w->buf_ptr++ = temp; break;				}			}		}	}}void _Indent(XmlWriter w){  int i;  int level = w->level;   if (level != 0)  {    for (i=0;i<level;i++)    {      Write(w, "  ");    }  }}void EndCurrentTag(XmlWriter w){  if (w->started == 1)  {    Write(w, ">");    w->started = 0;    if (w->valued == 0)    {      Write(w, "\r\n");    }  }  else  {    if (w->valued == 0)    {      Write(w, "\r\n");    }  }}void WriteStartDocument(XmlWriter w){  char *XmlStart = "<?xml version=\"1.0\" ?>";    Write(w, XmlStart);  return;}void WriteStartElement(XmlWriter w, char *tag, char **ns){//  char *_ns = ns;  char *_ns;    _ns = *ns;  EndCurrentTag(w);  _Indent(w);  Write(w, "<");//  if (_ns != NULL)  if (strcmp(ns[0], NONAMESPACE[0]))  {    Write(w, ns[0]);    Write(w, ":");  }  Write(w, tag);  w->started = 1;  w->level++;  return;}void WriteEndElement(XmlWriter w, char *tag, char **ns){//  char *_ns = ns;  char *_ns;    _ns = *ns;  w->level--;  if (w->started == 1)  {    Write(w, " />");  }  else  {    if (w->valued == 0)    {      Write(w, "\r\n");      _Indent(w);    }    else    {      w->valued = 0;    }    Write(w, "</");      //    if (_ns != NULL)    if (strcmp(ns[0], NONAMESPACE[0]))    {      Write(w, ns[0]);      Write(w, ":");    }    Write(w, tag);//    w->started = 1;    Write(w, ">");  }  w->started = 0;}void WriteAttributeString(XmlWriter w, char **attr, char **ns){//  char *_ns = ns;//  char *_attr = attr;  char *_ns;  char *_attr;    _ns = *ns;  _attr = *attr;  Write(w, " ");//  if (_ns != NULL)  if (strcmp(ns[0], NONAMESPACE[0]))  {    Write(w, ns[0]);    Write(w, ":");  }  Write(w, attr[0]);  Write(w, "=\"");  WriteEscaped(w, attr[1]);  Write(w, "\"");}void WriteEndDocument(XmlWriter w){  *w->buf_ptr++ = '\0';}void WriteNamespaces(XmlWriter w, char **ns){//  char *_ns = ns;  char *_ns;    _ns = *ns;  Write(w, " xmlns");  //  if (_ns != NULL)  if (strcmp(ns[0], NONAMESPACE[0]))  {    Write(w, ":");    Write(w, ns[0]);  }  Write(w, "=\"");	Write(w, ns[1]);	Write(w, "\"");}void WriteComment(XmlWriter w, char *str){  EndCurrentTag(w);//  Write(w, "\n");  _Indent(w);  Write(w, "<!-- ");  WriteEscaped(w, str);  Write(w, " -->");}void WriteValue(XmlWriter w, const char *value){  w->valued = 1;  EndCurrentTag(w);  WriteEscaped(w, value);}#if XMLWRITER_DEBUG==1int main(int argc, char *argv[]){  XmlWriter w;  char *ns1[] = {"SOAP-ENV", "http://schemas.xmlsoap.org/soap/envelope/"};  char *ns2[] = {"encodingStyle", "http://schemas.xmlsoap.org/soap/encoding/"};  char *ns3[] = {"ns1", "urn:TimeService"};  char *attr1[] = {"id", "1"};  char *envelope = "Envelope";  char *body     = "Body";  char *getdatetime = "GetDateTime";  char *para1 = "Date";  char *value = "2004-12-16";  w = XmlWriterCreate();  WriteStartDocument(w);  WriteStartElement(w, envelope, 0);  WriteNamespaces(w, ns1);  WriteAttributeString(w, attr1, ns1);  WriteStartElement(w, body, ns1);  WriteStartElement(w, getdatetime, ns3);  WriteNamespaces(w, ns3);  WriteValue(w, "this is time!");  WriteEndElement(w, getdatetime, ns3);  WriteComment(w, "comment test");  WriteEndElement(w, body, ns1);    WriteEndElement(w, envelope, ns1);  WriteEndDocument(w);  printf("%s", w->buf_start);  XmlWriterFree(w);  getchar();  return 0;}#endif /* XMLWRITER_DEBUG */}

⌨️ 快捷键说明

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