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