// @(#)root/xmlparser:$Id$
// Author: Jose Lo   12/4/2005

/*************************************************************************
 * Copyright (C) 1995-2005, Rene Brun and Fons Rademakers.               *
 * All rights reserved.                                                  *
 *                                                                       *
 * For the licensing terms see $ROOTSYS/LICENSE.                         *
 * For the list of contributors see $ROOTSYS/README/CREDITS.             *
 *************************************************************************/

#ifndef ROOT_TXMLNode
#define ROOT_TXMLNode

//////////////////////////////////////////////////////////////////////////
//                                                                      //
// TXMLNode                                                             //
//                                                                      //
// TXMLNode contains a pointer to xmlNode, which is a node under the    //
// DOM tree. A node can be an Element, an Attribute, a Text Node        //
// or a Comment Node.                                                   //
// One can navigate the DOM tree by accessing the siblings and          //
// parent or child nodes. Also retriving the Attribute or the Text in   //
// an Element node.                                                     //
//                                                                      //
//////////////////////////////////////////////////////////////////////////


#ifndef ROOT_TObject
#include "TObject.h"
#endif

#ifndef ROOT_TString
#include "TString.h"
#endif

class TList;
struct _xmlNode;

class TXMLNode : public TObject {

private:
   TXMLNode(const TXMLNode&);            // Not implemented
   TXMLNode& operator=(const TXMLNode&); // Not implemented

   _xmlNode *fXMLNode;        // libxml node

   TXMLNode *fParent;         // Parent node
   TXMLNode *fChildren;       // Children node
   TXMLNode *fNextNode;       // Next sibling node
   TXMLNode *fPreviousNode;   // Previous sibling node
   TList    *fAttrList;       // List of Attributes

public:
   // This enum is based on libxml tree Enum xmlElementType
   enum EXMLElementType {
      kXMLElementNode = 1,
      kXMLAttributeNode = 2,
      kXMLTextNode = 3,
      kXMLCommentNode = 8
   };

   TXMLNode(_xmlNode *node, TXMLNode* parent=0, TXMLNode* previous=0);

   virtual ~TXMLNode();

   EXMLElementType GetNodeType() const;
   const char *GetNodeName() const;
   TXMLNode   *GetChildren();
   TXMLNode   *GetParent() const;
   TXMLNode   *GetNextNode();
   TXMLNode   *GetPreviousNode() const;
   const char *GetContent() const;
   const char *GetText() const;
   TList      *GetAttributes();

   Bool_t      HasChildren() const;
   Bool_t      HasNextNode() const;
   Bool_t      HasParent() const;
   Bool_t      HasPreviousNode() const;
   Bool_t      HasAttributes() const;

   const char *GetNamespaceHref() const;
   const char *GetNamespacePrefix() const;

   ClassDef(TXMLNode,0);  // XML node under DOM tree
};

#endif
 TXMLNode.h:1
 TXMLNode.h:2
 TXMLNode.h:3
 TXMLNode.h:4
 TXMLNode.h:5
 TXMLNode.h:6
 TXMLNode.h:7
 TXMLNode.h:8
 TXMLNode.h:9
 TXMLNode.h:10
 TXMLNode.h:11
 TXMLNode.h:12
 TXMLNode.h:13
 TXMLNode.h:14
 TXMLNode.h:15
 TXMLNode.h:16
 TXMLNode.h:17
 TXMLNode.h:18
 TXMLNode.h:19
 TXMLNode.h:20
 TXMLNode.h:21
 TXMLNode.h:22
 TXMLNode.h:23
 TXMLNode.h:24
 TXMLNode.h:25
 TXMLNode.h:26
 TXMLNode.h:27
 TXMLNode.h:28
 TXMLNode.h:29
 TXMLNode.h:30
 TXMLNode.h:31
 TXMLNode.h:32
 TXMLNode.h:33
 TXMLNode.h:34
 TXMLNode.h:35
 TXMLNode.h:36
 TXMLNode.h:37
 TXMLNode.h:38
 TXMLNode.h:39
 TXMLNode.h:40
 TXMLNode.h:41
 TXMLNode.h:42
 TXMLNode.h:43
 TXMLNode.h:44
 TXMLNode.h:45
 TXMLNode.h:46
 TXMLNode.h:47
 TXMLNode.h:48
 TXMLNode.h:49
 TXMLNode.h:50
 TXMLNode.h:51
 TXMLNode.h:52
 TXMLNode.h:53
 TXMLNode.h:54
 TXMLNode.h:55
 TXMLNode.h:56
 TXMLNode.h:57
 TXMLNode.h:58
 TXMLNode.h:59
 TXMLNode.h:60
 TXMLNode.h:61
 TXMLNode.h:62
 TXMLNode.h:63
 TXMLNode.h:64
 TXMLNode.h:65
 TXMLNode.h:66
 TXMLNode.h:67
 TXMLNode.h:68
 TXMLNode.h:69
 TXMLNode.h:70
 TXMLNode.h:71
 TXMLNode.h:72
 TXMLNode.h:73
 TXMLNode.h:74
 TXMLNode.h:75
 TXMLNode.h:76
 TXMLNode.h:77
 TXMLNode.h:78
 TXMLNode.h:79
 TXMLNode.h:80
 TXMLNode.h:81
 TXMLNode.h:82
 TXMLNode.h:83
 TXMLNode.h:84
 TXMLNode.h:85
 TXMLNode.h:86
 TXMLNode.h:87
 TXMLNode.h:88
 TXMLNode.h:89