// @(#)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

#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