libxml.py revision 3ce5257b293ed75d8feb18ed7ab18ea2b52510bd
1import _libxml
2
3#
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#
9class xmlCore:
10    def __init__(self, _obj=None):
11        if _obj != None:
12	    self._o = _obj;
13	    return
14	self._o = None
15
16    def __getattr__(self, attr):
17        if attr == "parent":
18	    ret = _libxml.parent(self._o)
19	    if ret == None:
20	        return None
21	    return xmlNode(_obj=ret)
22        elif attr == "properties":
23	    ret = _libxml.properties(self._o)
24	    if ret == None:
25	        return None
26	    return xmlAttr(_obj=ret)
27	elif attr == "children":
28	    ret = _libxml.children(self._o)
29	    if ret == None:
30		return None
31	    return xmlNode(_obj=ret)
32	elif attr == "last":
33	    ret = _libxml.last(self._o)
34	    if ret == None:
35		return None
36	    return xmlNode(_obj=ret)
37	elif attr == "next":
38	    ret = _libxml.next(self._o)
39	    if ret == None:
40		return None
41	    return xmlNode(_obj=ret)
42	elif attr == "prev":
43	    ret = _libxml.prev(self._o)
44	    if ret == None:
45		return None
46	    return xmlNode(_obj=ret)
47	elif attr == "content":
48	    return _libxml.xmlNodeGetContent(self._o)
49	elif attr == "name":
50	    return _libxml.name(self._o)
51	elif attr == "type":
52	    return _libxml.type(self._o)
53	elif attr == "doc":
54	    ret = _libxml.doc(self._o)
55	    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):
64	ret = _libxml.parent(self._o)
65	if ret == None:
66	    return None
67	return xmlNode(_obj=ret)
68    def get_children(self):
69	ret = _libxml.children(self._o)
70	if ret == None:
71	    return None
72	return xmlNode(_obj=ret)
73    def get_last(self):
74	ret = _libxml.last(self._o)
75	if ret == None:
76	    return None
77	return xmlNode(_obj=ret)
78    def get_next(self):
79	ret = _libxml.next(self._o)
80	if ret == None:
81	    return None
82	return xmlNode(_obj=ret)
83    def get_properties(self):
84	ret = _libxml.properties(self._o)
85	if ret == None:
86	    return None
87	return xmlAttr(_obj=ret)
88    def get_doc(self):
89	ret = _libxml.doc(self._o)
90	if ret == None:
91	    return None
92	return xmlDoc(_obj=ret)
93    def get_prev(self):
94	ret = _libxml.prev(self._o)
95	if ret == None:
96	    return None
97	return xmlNode(_obj=ret)
98    def get_content(self):
99	return _libxml.xmlNodeGetContent(self._o)
100    def getContent(self):
101	return _libxml.xmlNodeGetContent(self._o)
102    def get_name(self):
103	return _libxml.name(self._o)
104    def get_type(self):
105	return _libxml.type(self._o)
106    def get_doc(self):
107	ret = _libxml.doc(self._o)
108	if ret == None:
109	    return None
110	return xmlDoc(_doc=ret)
111    def free(self):
112        _libxml.freeDoc(self._o)
113
114#
115# 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
119    name = _libxml.name(o)
120    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#
145# register an XPath function
146#
147def registerXPathFunction(ctxt, name, ns_uri, f):
148    ret = _libxml.xmlRegisterXPathFunction(ctxt, name, ns_uri, f)
149
150#
151# Everything below this point is automatically generated
152#
153
154