blob: fdec3e6125ba4ebeff29e9a962031bcef46e4384 [file] [log] [blame]
Daniel Veillard5e5c2d02002-02-09 18:03:01 +00001import libxml2mod
Daniel Veillardd2897fd2002-01-30 16:37:32 +00002
Daniel Veillard1971ee22002-01-31 20:29:19 +00003#
4# This class is the ancestor of all the Node classes. It provides
5# the basic functionalities shared by all nodes (and handle
6# gracefylly the exception), like name, navigation in the tree,
7# doc reference and content access
8#
Daniel Veillard36ed5292002-01-30 23:49:06 +00009class xmlCore:
Daniel Veillardd2897fd2002-01-30 16:37:32 +000010 def __init__(self, _obj=None):
11 if _obj != None:
12 self._o = _obj;
13 return
14 self._o = None
15
Daniel Veillardd2897fd2002-01-30 16:37:32 +000016 def __getattr__(self, attr):
17 if attr == "parent":
Daniel Veillard5e5c2d02002-02-09 18:03:01 +000018 ret = libxml2mod.parent(self._o)
Daniel Veillardd2897fd2002-01-30 16:37:32 +000019 if ret == None:
20 return None
21 return xmlNode(_obj=ret)
22 elif attr == "properties":
Daniel Veillard5e5c2d02002-02-09 18:03:01 +000023 ret = libxml2mod.properties(self._o)
Daniel Veillardd2897fd2002-01-30 16:37:32 +000024 if ret == None:
25 return None
Daniel Veillard1971ee22002-01-31 20:29:19 +000026 return xmlAttr(_obj=ret)
Daniel Veillardd2897fd2002-01-30 16:37:32 +000027 elif attr == "children":
Daniel Veillard5e5c2d02002-02-09 18:03:01 +000028 ret = libxml2mod.children(self._o)
Daniel Veillardd2897fd2002-01-30 16:37:32 +000029 if ret == None:
30 return None
31 return xmlNode(_obj=ret)
32 elif attr == "last":
Daniel Veillard5e5c2d02002-02-09 18:03:01 +000033 ret = libxml2mod.last(self._o)
Daniel Veillardd2897fd2002-01-30 16:37:32 +000034 if ret == None:
35 return None
36 return xmlNode(_obj=ret)
37 elif attr == "next":
Daniel Veillard5e5c2d02002-02-09 18:03:01 +000038 ret = libxml2mod.next(self._o)
Daniel Veillardd2897fd2002-01-30 16:37:32 +000039 if ret == None:
40 return None
41 return xmlNode(_obj=ret)
42 elif attr == "prev":
Daniel Veillard5e5c2d02002-02-09 18:03:01 +000043 ret = libxml2mod.prev(self._o)
Daniel Veillardd2897fd2002-01-30 16:37:32 +000044 if ret == None:
45 return None
46 return xmlNode(_obj=ret)
47 elif attr == "content":
Daniel Veillard5e5c2d02002-02-09 18:03:01 +000048 return libxml2mod.xmlNodeGetContent(self._o)
Daniel Veillardd2897fd2002-01-30 16:37:32 +000049 elif attr == "name":
Daniel Veillard5e5c2d02002-02-09 18:03:01 +000050 return libxml2mod.name(self._o)
Daniel Veillardd2897fd2002-01-30 16:37:32 +000051 elif attr == "type":
Daniel Veillard5e5c2d02002-02-09 18:03:01 +000052 return libxml2mod.type(self._o)
Daniel Veillardd2897fd2002-01-30 16:37:32 +000053 elif attr == "doc":
Daniel Veillard5e5c2d02002-02-09 18:03:01 +000054 ret = libxml2mod.doc(self._o)
Daniel Veillardd2897fd2002-01-30 16:37:32 +000055 if ret == None:
56 return None
57 return xmlDoc(_doc=ret)
58 raise AttributeError,attr
59
60 #
61 # Those are common attributes to nearly all type of nodes
62 #
63 def get_parent(self):
Daniel Veillard5e5c2d02002-02-09 18:03:01 +000064 ret = libxml2mod.parent(self._o)
Daniel Veillardd2897fd2002-01-30 16:37:32 +000065 if ret == None:
66 return None
67 return xmlNode(_obj=ret)
68 def get_children(self):
Daniel Veillard5e5c2d02002-02-09 18:03:01 +000069 ret = libxml2mod.children(self._o)
Daniel Veillardd2897fd2002-01-30 16:37:32 +000070 if ret == None:
71 return None
72 return xmlNode(_obj=ret)
73 def get_last(self):
Daniel Veillard5e5c2d02002-02-09 18:03:01 +000074 ret = libxml2mod.last(self._o)
Daniel Veillardd2897fd2002-01-30 16:37:32 +000075 if ret == None:
76 return None
77 return xmlNode(_obj=ret)
78 def get_next(self):
Daniel Veillard5e5c2d02002-02-09 18:03:01 +000079 ret = libxml2mod.next(self._o)
Daniel Veillardd2897fd2002-01-30 16:37:32 +000080 if ret == None:
81 return None
82 return xmlNode(_obj=ret)
Daniel Veillard1971ee22002-01-31 20:29:19 +000083 def get_properties(self):
Daniel Veillard5e5c2d02002-02-09 18:03:01 +000084 ret = libxml2mod.properties(self._o)
Daniel Veillard1971ee22002-01-31 20:29:19 +000085 if ret == None:
86 return None
87 return xmlAttr(_obj=ret)
88 def get_doc(self):
Daniel Veillard5e5c2d02002-02-09 18:03:01 +000089 ret = libxml2mod.doc(self._o)
Daniel Veillard1971ee22002-01-31 20:29:19 +000090 if ret == None:
91 return None
92 return xmlDoc(_obj=ret)
Daniel Veillardd2897fd2002-01-30 16:37:32 +000093 def get_prev(self):
Daniel Veillard5e5c2d02002-02-09 18:03:01 +000094 ret = libxml2mod.prev(self._o)
Daniel Veillardd2897fd2002-01-30 16:37:32 +000095 if ret == None:
96 return None
97 return xmlNode(_obj=ret)
98 def get_content(self):
Daniel Veillard5e5c2d02002-02-09 18:03:01 +000099 return libxml2mod.xmlNodeGetContent(self._o)
Daniel Veillard1971ee22002-01-31 20:29:19 +0000100 def getContent(self):
Daniel Veillard5e5c2d02002-02-09 18:03:01 +0000101 return libxml2mod.xmlNodeGetContent(self._o)
Daniel Veillardd2897fd2002-01-30 16:37:32 +0000102 def get_name(self):
Daniel Veillard5e5c2d02002-02-09 18:03:01 +0000103 return libxml2mod.name(self._o)
Daniel Veillardd2897fd2002-01-30 16:37:32 +0000104 def get_type(self):
Daniel Veillard5e5c2d02002-02-09 18:03:01 +0000105 return libxml2mod.type(self._o)
Daniel Veillardd2897fd2002-01-30 16:37:32 +0000106 def get_doc(self):
Daniel Veillard5e5c2d02002-02-09 18:03:01 +0000107 ret = libxml2mod.doc(self._o)
Daniel Veillardd2897fd2002-01-30 16:37:32 +0000108 if ret == None:
109 return None
110 return xmlDoc(_doc=ret)
111 def free(self):
Daniel Veillard5e5c2d02002-02-09 18:03:01 +0000112 libxml2mod.freeDoc(self._o)
Daniel Veillardd2897fd2002-01-30 16:37:32 +0000113
Daniel Veillard36ed5292002-01-30 23:49:06 +0000114#
Daniel Veillard1971ee22002-01-31 20:29:19 +0000115# converters to present a nicer view of the XPath returns
116#
117def nodeWrap(o):
118 # TODO try to cast to the most appropriate node class
Daniel Veillard5e5c2d02002-02-09 18:03:01 +0000119 name = libxml2mod.name(o)
Daniel Veillard1971ee22002-01-31 20:29:19 +0000120 if name == "element" or name == "text":
121 return xmlNode(_obj=o)
122 if name == "attribute":
123 return xmlAttr(_obj=o)
124 if name[0:8] == "document":
125 return xmlDoc(_obj=o)
126 if name[0:8] == "namespace":
127 return xmlNs(_obj=o)
128 if name == "elem_decl":
129 return xmlElement(_obj=o)
130 if name == "attribute_decl":
131 return xmlAtribute(_obj=o)
132 if name == "entity_decl":
133 return xmlEntity(_obj=o)
134 if name == "dtd":
135 return xmlAttr(_obj=o)
136 return xmlNode(_obj=o)
137
138def xpathObjectRet(o):
139 if type(o) == type([]) or type(o) == type(()):
140 ret = map(lambda x: nodeWrap(x), o)
141 return ret
142 return o
143
144#
Daniel Veillarda7340c82002-02-01 17:56:45 +0000145# register an XPath function
146#
147def registerXPathFunction(ctxt, name, ns_uri, f):
Daniel Veillard5e5c2d02002-02-09 18:03:01 +0000148 ret = libxml2mod.xmlRegisterXPathFunction(ctxt, name, ns_uri, f)
Daniel Veillarda7340c82002-02-01 17:56:45 +0000149
150#
Daniel Veillard36ed5292002-01-30 23:49:06 +0000151# Everything below this point is automatically generated
152#
Daniel Veillard1971ee22002-01-31 20:29:19 +0000153