libxml.py revision 01a6d4170c87368621db478b4d98530265bb9b1f
15e5c2d0a93e3e1bef0aaa63500cbbbd53e6a4063Daniel Veillardimport libxml2mod 2d2897fde0089a9f349f7a589c1e58a8e130a3d61Daniel Veillard 31971ee2698cb84c7699c96d3302f00e20d42c0d3Daniel Veillard# 41971ee2698cb84c7699c96d3302f00e20d42c0d3Daniel Veillard# This class is the ancestor of all the Node classes. It provides 51971ee2698cb84c7699c96d3302f00e20d42c0d3Daniel Veillard# the basic functionalities shared by all nodes (and handle 61971ee2698cb84c7699c96d3302f00e20d42c0d3Daniel Veillard# gracefylly the exception), like name, navigation in the tree, 71971ee2698cb84c7699c96d3302f00e20d42c0d3Daniel Veillard# doc reference and content access 81971ee2698cb84c7699c96d3302f00e20d42c0d3Daniel Veillard# 936ed5290a2dd1d44ddc0f102f6251156ad6965b9Daniel Veillardclass xmlCore: 10d2897fde0089a9f349f7a589c1e58a8e130a3d61Daniel Veillard def __init__(self, _obj=None): 11d2897fde0089a9f349f7a589c1e58a8e130a3d61Daniel Veillard if _obj != None: 1201a6d4170c87368621db478b4d98530265bb9b1fDaniel Veillard self._o = _obj; 1301a6d4170c87368621db478b4d98530265bb9b1fDaniel Veillard return 1401a6d4170c87368621db478b4d98530265bb9b1fDaniel Veillard self._o = None 15d2897fde0089a9f349f7a589c1e58a8e130a3d61Daniel Veillard 16d2897fde0089a9f349f7a589c1e58a8e130a3d61Daniel Veillard def __getattr__(self, attr): 17d2897fde0089a9f349f7a589c1e58a8e130a3d61Daniel Veillard if attr == "parent": 1801a6d4170c87368621db478b4d98530265bb9b1fDaniel Veillard ret = libxml2mod.parent(self._o) 1901a6d4170c87368621db478b4d98530265bb9b1fDaniel Veillard if ret == None: 2001a6d4170c87368621db478b4d98530265bb9b1fDaniel Veillard return None 2101a6d4170c87368621db478b4d98530265bb9b1fDaniel Veillard return xmlNode(_obj=ret) 22d2897fde0089a9f349f7a589c1e58a8e130a3d61Daniel Veillard elif attr == "properties": 2301a6d4170c87368621db478b4d98530265bb9b1fDaniel Veillard ret = libxml2mod.properties(self._o) 2401a6d4170c87368621db478b4d98530265bb9b1fDaniel Veillard if ret == None: 2501a6d4170c87368621db478b4d98530265bb9b1fDaniel Veillard return None 2601a6d4170c87368621db478b4d98530265bb9b1fDaniel Veillard return xmlAttr(_obj=ret) 2701a6d4170c87368621db478b4d98530265bb9b1fDaniel Veillard elif attr == "children": 2801a6d4170c87368621db478b4d98530265bb9b1fDaniel Veillard ret = libxml2mod.children(self._o) 2901a6d4170c87368621db478b4d98530265bb9b1fDaniel Veillard if ret == None: 3001a6d4170c87368621db478b4d98530265bb9b1fDaniel Veillard return None 3101a6d4170c87368621db478b4d98530265bb9b1fDaniel Veillard return xmlNode(_obj=ret) 3201a6d4170c87368621db478b4d98530265bb9b1fDaniel Veillard elif attr == "last": 3301a6d4170c87368621db478b4d98530265bb9b1fDaniel Veillard ret = libxml2mod.last(self._o) 3401a6d4170c87368621db478b4d98530265bb9b1fDaniel Veillard if ret == None: 3501a6d4170c87368621db478b4d98530265bb9b1fDaniel Veillard return None 3601a6d4170c87368621db478b4d98530265bb9b1fDaniel Veillard return xmlNode(_obj=ret) 3701a6d4170c87368621db478b4d98530265bb9b1fDaniel Veillard elif attr == "next": 3801a6d4170c87368621db478b4d98530265bb9b1fDaniel Veillard ret = libxml2mod.next(self._o) 3901a6d4170c87368621db478b4d98530265bb9b1fDaniel Veillard if ret == None: 4001a6d4170c87368621db478b4d98530265bb9b1fDaniel Veillard return None 4101a6d4170c87368621db478b4d98530265bb9b1fDaniel Veillard return xmlNode(_obj=ret) 4201a6d4170c87368621db478b4d98530265bb9b1fDaniel Veillard elif attr == "prev": 4301a6d4170c87368621db478b4d98530265bb9b1fDaniel Veillard ret = libxml2mod.prev(self._o) 4401a6d4170c87368621db478b4d98530265bb9b1fDaniel Veillard if ret == None: 4501a6d4170c87368621db478b4d98530265bb9b1fDaniel Veillard return None 4601a6d4170c87368621db478b4d98530265bb9b1fDaniel Veillard return xmlNode(_obj=ret) 4701a6d4170c87368621db478b4d98530265bb9b1fDaniel Veillard elif attr == "content": 4801a6d4170c87368621db478b4d98530265bb9b1fDaniel Veillard return libxml2mod.xmlNodeGetContent(self._o) 4901a6d4170c87368621db478b4d98530265bb9b1fDaniel Veillard elif attr == "name": 5001a6d4170c87368621db478b4d98530265bb9b1fDaniel Veillard return libxml2mod.name(self._o) 5101a6d4170c87368621db478b4d98530265bb9b1fDaniel Veillard elif attr == "type": 5201a6d4170c87368621db478b4d98530265bb9b1fDaniel Veillard return libxml2mod.type(self._o) 5301a6d4170c87368621db478b4d98530265bb9b1fDaniel Veillard elif attr == "doc": 5401a6d4170c87368621db478b4d98530265bb9b1fDaniel Veillard ret = libxml2mod.doc(self._o) 5501a6d4170c87368621db478b4d98530265bb9b1fDaniel Veillard if ret == None: 5601a6d4170c87368621db478b4d98530265bb9b1fDaniel Veillard return None 5701a6d4170c87368621db478b4d98530265bb9b1fDaniel Veillard return xmlDoc(_doc=ret) 5801a6d4170c87368621db478b4d98530265bb9b1fDaniel Veillard raise AttributeError,attr 59d2897fde0089a9f349f7a589c1e58a8e130a3d61Daniel Veillard 6001a6d4170c87368621db478b4d98530265bb9b1fDaniel Veillard # 6101a6d4170c87368621db478b4d98530265bb9b1fDaniel Veillard # Those are common attributes to nearly all type of nodes 6201a6d4170c87368621db478b4d98530265bb9b1fDaniel Veillard # 63d2897fde0089a9f349f7a589c1e58a8e130a3d61Daniel Veillard def get_parent(self): 6401a6d4170c87368621db478b4d98530265bb9b1fDaniel Veillard ret = libxml2mod.parent(self._o) 6501a6d4170c87368621db478b4d98530265bb9b1fDaniel Veillard if ret == None: 6601a6d4170c87368621db478b4d98530265bb9b1fDaniel Veillard return None 6701a6d4170c87368621db478b4d98530265bb9b1fDaniel Veillard return xmlNode(_obj=ret) 68d2897fde0089a9f349f7a589c1e58a8e130a3d61Daniel Veillard def get_children(self): 6901a6d4170c87368621db478b4d98530265bb9b1fDaniel Veillard ret = libxml2mod.children(self._o) 7001a6d4170c87368621db478b4d98530265bb9b1fDaniel Veillard if ret == None: 7101a6d4170c87368621db478b4d98530265bb9b1fDaniel Veillard return None 7201a6d4170c87368621db478b4d98530265bb9b1fDaniel Veillard return xmlNode(_obj=ret) 73d2897fde0089a9f349f7a589c1e58a8e130a3d61Daniel Veillard def get_last(self): 7401a6d4170c87368621db478b4d98530265bb9b1fDaniel Veillard ret = libxml2mod.last(self._o) 7501a6d4170c87368621db478b4d98530265bb9b1fDaniel Veillard if ret == None: 7601a6d4170c87368621db478b4d98530265bb9b1fDaniel Veillard return None 7701a6d4170c87368621db478b4d98530265bb9b1fDaniel Veillard return xmlNode(_obj=ret) 78d2897fde0089a9f349f7a589c1e58a8e130a3d61Daniel Veillard def get_next(self): 7901a6d4170c87368621db478b4d98530265bb9b1fDaniel Veillard ret = libxml2mod.next(self._o) 8001a6d4170c87368621db478b4d98530265bb9b1fDaniel Veillard if ret == None: 8101a6d4170c87368621db478b4d98530265bb9b1fDaniel Veillard return None 8201a6d4170c87368621db478b4d98530265bb9b1fDaniel Veillard return xmlNode(_obj=ret) 831971ee2698cb84c7699c96d3302f00e20d42c0d3Daniel Veillard def get_properties(self): 8401a6d4170c87368621db478b4d98530265bb9b1fDaniel Veillard ret = libxml2mod.properties(self._o) 8501a6d4170c87368621db478b4d98530265bb9b1fDaniel Veillard if ret == None: 8601a6d4170c87368621db478b4d98530265bb9b1fDaniel Veillard return None 8701a6d4170c87368621db478b4d98530265bb9b1fDaniel Veillard return xmlAttr(_obj=ret) 881971ee2698cb84c7699c96d3302f00e20d42c0d3Daniel Veillard def get_doc(self): 8901a6d4170c87368621db478b4d98530265bb9b1fDaniel Veillard ret = libxml2mod.doc(self._o) 9001a6d4170c87368621db478b4d98530265bb9b1fDaniel Veillard if ret == None: 9101a6d4170c87368621db478b4d98530265bb9b1fDaniel Veillard return None 9201a6d4170c87368621db478b4d98530265bb9b1fDaniel Veillard return xmlDoc(_obj=ret) 93d2897fde0089a9f349f7a589c1e58a8e130a3d61Daniel Veillard def get_prev(self): 9401a6d4170c87368621db478b4d98530265bb9b1fDaniel Veillard ret = libxml2mod.prev(self._o) 9501a6d4170c87368621db478b4d98530265bb9b1fDaniel Veillard if ret == None: 9601a6d4170c87368621db478b4d98530265bb9b1fDaniel Veillard return None 9701a6d4170c87368621db478b4d98530265bb9b1fDaniel Veillard return xmlNode(_obj=ret) 98d2897fde0089a9f349f7a589c1e58a8e130a3d61Daniel Veillard def get_content(self): 9901a6d4170c87368621db478b4d98530265bb9b1fDaniel Veillard return libxml2mod.xmlNodeGetContent(self._o) 1001971ee2698cb84c7699c96d3302f00e20d42c0d3Daniel Veillard def getContent(self): 10101a6d4170c87368621db478b4d98530265bb9b1fDaniel Veillard return libxml2mod.xmlNodeGetContent(self._o) 102d2897fde0089a9f349f7a589c1e58a8e130a3d61Daniel Veillard def get_name(self): 10301a6d4170c87368621db478b4d98530265bb9b1fDaniel Veillard return libxml2mod.name(self._o) 104d2897fde0089a9f349f7a589c1e58a8e130a3d61Daniel Veillard def get_type(self): 10501a6d4170c87368621db478b4d98530265bb9b1fDaniel Veillard return libxml2mod.type(self._o) 106d2897fde0089a9f349f7a589c1e58a8e130a3d61Daniel Veillard def get_doc(self): 10701a6d4170c87368621db478b4d98530265bb9b1fDaniel Veillard ret = libxml2mod.doc(self._o) 10801a6d4170c87368621db478b4d98530265bb9b1fDaniel Veillard if ret == None: 10901a6d4170c87368621db478b4d98530265bb9b1fDaniel Veillard return None 11001a6d4170c87368621db478b4d98530265bb9b1fDaniel Veillard return xmlDoc(_doc=ret) 111d2897fde0089a9f349f7a589c1e58a8e130a3d61Daniel Veillard def free(self): 1125e5c2d0a93e3e1bef0aaa63500cbbbd53e6a4063Daniel Veillard libxml2mod.freeDoc(self._o) 11301a6d4170c87368621db478b4d98530265bb9b1fDaniel Veillard 11436ed5290a2dd1d44ddc0f102f6251156ad6965b9Daniel Veillard# 1151971ee2698cb84c7699c96d3302f00e20d42c0d3Daniel Veillard# converters to present a nicer view of the XPath returns 1161971ee2698cb84c7699c96d3302f00e20d42c0d3Daniel Veillard# 1171971ee2698cb84c7699c96d3302f00e20d42c0d3Daniel Veillarddef nodeWrap(o): 1181971ee2698cb84c7699c96d3302f00e20d42c0d3Daniel Veillard # TODO try to cast to the most appropriate node class 1195e5c2d0a93e3e1bef0aaa63500cbbbd53e6a4063Daniel Veillard name = libxml2mod.name(o) 1201971ee2698cb84c7699c96d3302f00e20d42c0d3Daniel Veillard if name == "element" or name == "text": 1211971ee2698cb84c7699c96d3302f00e20d42c0d3Daniel Veillard return xmlNode(_obj=o) 1221971ee2698cb84c7699c96d3302f00e20d42c0d3Daniel Veillard if name == "attribute": 1231971ee2698cb84c7699c96d3302f00e20d42c0d3Daniel Veillard return xmlAttr(_obj=o) 1241971ee2698cb84c7699c96d3302f00e20d42c0d3Daniel Veillard if name[0:8] == "document": 1251971ee2698cb84c7699c96d3302f00e20d42c0d3Daniel Veillard return xmlDoc(_obj=o) 1261971ee2698cb84c7699c96d3302f00e20d42c0d3Daniel Veillard if name[0:8] == "namespace": 1271971ee2698cb84c7699c96d3302f00e20d42c0d3Daniel Veillard return xmlNs(_obj=o) 1281971ee2698cb84c7699c96d3302f00e20d42c0d3Daniel Veillard if name == "elem_decl": 1291971ee2698cb84c7699c96d3302f00e20d42c0d3Daniel Veillard return xmlElement(_obj=o) 1301971ee2698cb84c7699c96d3302f00e20d42c0d3Daniel Veillard if name == "attribute_decl": 1311971ee2698cb84c7699c96d3302f00e20d42c0d3Daniel Veillard return xmlAtribute(_obj=o) 1321971ee2698cb84c7699c96d3302f00e20d42c0d3Daniel Veillard if name == "entity_decl": 1331971ee2698cb84c7699c96d3302f00e20d42c0d3Daniel Veillard return xmlEntity(_obj=o) 1341971ee2698cb84c7699c96d3302f00e20d42c0d3Daniel Veillard if name == "dtd": 1351971ee2698cb84c7699c96d3302f00e20d42c0d3Daniel Veillard return xmlAttr(_obj=o) 1361971ee2698cb84c7699c96d3302f00e20d42c0d3Daniel Veillard return xmlNode(_obj=o) 1371971ee2698cb84c7699c96d3302f00e20d42c0d3Daniel Veillard 1381971ee2698cb84c7699c96d3302f00e20d42c0d3Daniel Veillarddef xpathObjectRet(o): 1391971ee2698cb84c7699c96d3302f00e20d42c0d3Daniel Veillard if type(o) == type([]) or type(o) == type(()): 1401971ee2698cb84c7699c96d3302f00e20d42c0d3Daniel Veillard ret = map(lambda x: nodeWrap(x), o) 14101a6d4170c87368621db478b4d98530265bb9b1fDaniel Veillard return ret 1421971ee2698cb84c7699c96d3302f00e20d42c0d3Daniel Veillard return o 1431971ee2698cb84c7699c96d3302f00e20d42c0d3Daniel Veillard 1441971ee2698cb84c7699c96d3302f00e20d42c0d3Daniel Veillard# 145a7340c830e4bddd86201cfdb97ac81e30b0dee62Daniel Veillard# register an XPath function 146a7340c830e4bddd86201cfdb97ac81e30b0dee62Daniel Veillard# 147a7340c830e4bddd86201cfdb97ac81e30b0dee62Daniel Veillarddef registerXPathFunction(ctxt, name, ns_uri, f): 1485e5c2d0a93e3e1bef0aaa63500cbbbd53e6a4063Daniel Veillard ret = libxml2mod.xmlRegisterXPathFunction(ctxt, name, ns_uri, f) 149a7340c830e4bddd86201cfdb97ac81e30b0dee62Daniel Veillard 150a7340c830e4bddd86201cfdb97ac81e30b0dee62Daniel Veillard# 15136ed5290a2dd1d44ddc0f102f6251156ad6965b9Daniel Veillard# Everything below this point is automatically generated 15236ed5290a2dd1d44ddc0f102f6251156ad6965b9Daniel Veillard# 1531971ee2698cb84c7699c96d3302f00e20d42c0d3Daniel Veillard 154