xml.h
上传用户:chn_coc
上传日期:2007-12-20
资源大小:563k
文件大小:2k
源码类别:

P2P编程

开发平台:

Windows_Unix

  1. // ------------------------------------------------
  2. // File : xml.h
  3. // Date: 4-apr-2002
  4. // Author: giles
  5. // Desc: 
  6. //
  7. // (c) 2002 peercast.org
  8. // ------------------------------------------------
  9. // This program is free software; you can redistribute it and/or modify
  10. // it under the terms of the GNU General Public License as published by
  11. // the Free Software Foundation; either version 2 of the License, or
  12. // (at your option) any later version.
  13. // This program is distributed in the hope that it will be useful,
  14. // but WITHOUT ANY WARRANTY; without even the implied warranty of
  15. // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  16. // GNU General Public License for more details.
  17. // ------------------------------------------------
  18. #ifndef _XML_H
  19. #define _XML_H
  20. //-----------------------
  21. #include "common.h"
  22. #include <stdarg.h>
  23. //-----------------------
  24. class Stream;
  25. //-----------------------
  26. class XML
  27. {
  28. public:
  29. class Node
  30.     {
  31.     public:
  32.      class Attribute
  33.         {
  34.          public:
  35.                 int namePos,valuePos;
  36.         };
  37. Node(const char *,...);
  38. void init();
  39.         ~Node();
  40.         
  41.     void add(Node *);
  42.         void write(Stream &,int);  // output, level
  43.         char  *getName() {return getAttrName(0);}
  44.         char  *getAttrValue(int i) {return &attrData[attr[i].valuePos];}
  45.         char  *getAttrName(int i) {return &attrData[attr[i].namePos];}
  46.         char *getContent()  {return contData; }
  47.         int getBinaryContent(void *, int);
  48.         void setAttributes(const char *);
  49.         void setContent(const char *);
  50.         void setBinaryContent(void *, int);
  51.     Node *findNode(const char *);
  52.         char *findAttr(const char *);
  53.         int findAttrInt(const char *);
  54.         int findAttrID(const char *);
  55.         char *contData,*attrData;
  56.         Attribute *attr;
  57.         int numAttr;
  58.      Node *child,*parent,*sibling;
  59.         void *userPtr;
  60.     };
  61.     XML()
  62.     {
  63.      root = NULL;
  64.     }
  65.     ~XML();
  66.     void setRoot(Node *n);
  67.     void write(Stream &);
  68.     void writeCompact(Stream &);
  69.     void writeHTML(Stream &);
  70.     void read(Stream &);
  71.     Node *findNode(const char *n);
  72.     Node *root;
  73. };
  74. #endif