libxml.py revision c6d4a933f017b17cacdf2a6f6505faf8d945b0b3
15e5c2d0a93e3e1bef0aaa63500cbbbd53e6a4063Daniel Veillardimport libxml2mod 2d2897fde0089a9f349f7a589c1e58a8e130a3d61Daniel Veillard 31971ee2698cb84c7699c96d3302f00e20d42c0d3Daniel Veillard# 48d24cc189845663509623fbd6b5106cc01266994Daniel Veillard# Errors raised by the wrappers when some tree handling failed. 58d24cc189845663509623fbd6b5106cc01266994Daniel Veillard# 68d24cc189845663509623fbd6b5106cc01266994Daniel Veillardclass treeError: 78d24cc189845663509623fbd6b5106cc01266994Daniel Veillard def __init__(self, msg): 88d24cc189845663509623fbd6b5106cc01266994Daniel Veillard self.msg = msg 98d24cc189845663509623fbd6b5106cc01266994Daniel Veillard def __str__(self): 108d24cc189845663509623fbd6b5106cc01266994Daniel Veillard return self.msg 118d24cc189845663509623fbd6b5106cc01266994Daniel Veillard 128d24cc189845663509623fbd6b5106cc01266994Daniel Veillardclass parserError: 138d24cc189845663509623fbd6b5106cc01266994Daniel Veillard def __init__(self, msg): 148d24cc189845663509623fbd6b5106cc01266994Daniel Veillard self.msg = msg 158d24cc189845663509623fbd6b5106cc01266994Daniel Veillard def __str__(self): 168d24cc189845663509623fbd6b5106cc01266994Daniel Veillard return self.msg 178d24cc189845663509623fbd6b5106cc01266994Daniel Veillard 188d24cc189845663509623fbd6b5106cc01266994Daniel Veillardclass uriError: 198d24cc189845663509623fbd6b5106cc01266994Daniel Veillard def __init__(self, msg): 208d24cc189845663509623fbd6b5106cc01266994Daniel Veillard self.msg = msg 218d24cc189845663509623fbd6b5106cc01266994Daniel Veillard def __str__(self): 228d24cc189845663509623fbd6b5106cc01266994Daniel Veillard return self.msg 238d24cc189845663509623fbd6b5106cc01266994Daniel Veillard 248d24cc189845663509623fbd6b5106cc01266994Daniel Veillardclass xpathError: 258d24cc189845663509623fbd6b5106cc01266994Daniel Veillard def __init__(self, msg): 268d24cc189845663509623fbd6b5106cc01266994Daniel Veillard self.msg = msg 278d24cc189845663509623fbd6b5106cc01266994Daniel Veillard def __str__(self): 288d24cc189845663509623fbd6b5106cc01266994Daniel Veillard return self.msg 298d24cc189845663509623fbd6b5106cc01266994Daniel Veillard 30c6d4a933f017b17cacdf2a6f6505faf8d945b0b3Daniel Veillardclass ioWrapper: 31c6d4a933f017b17cacdf2a6f6505faf8d945b0b3Daniel Veillard def __init__(self, _obj): 32c6d4a933f017b17cacdf2a6f6505faf8d945b0b3Daniel Veillard self.__io = _obj 33c6d4a933f017b17cacdf2a6f6505faf8d945b0b3Daniel Veillard self._o = None 34c6d4a933f017b17cacdf2a6f6505faf8d945b0b3Daniel Veillard 35c6d4a933f017b17cacdf2a6f6505faf8d945b0b3Daniel Veillard def io_close(self): 36c6d4a933f017b17cacdf2a6f6505faf8d945b0b3Daniel Veillard if self.__io == None: 37c6d4a933f017b17cacdf2a6f6505faf8d945b0b3Daniel Veillard return(-1) 38c6d4a933f017b17cacdf2a6f6505faf8d945b0b3Daniel Veillard self.__io.close() 39c6d4a933f017b17cacdf2a6f6505faf8d945b0b3Daniel Veillard self.__io = None 40c6d4a933f017b17cacdf2a6f6505faf8d945b0b3Daniel Veillard return(0) 41c6d4a933f017b17cacdf2a6f6505faf8d945b0b3Daniel Veillard 42c6d4a933f017b17cacdf2a6f6505faf8d945b0b3Daniel Veillard def io_flush(self): 43c6d4a933f017b17cacdf2a6f6505faf8d945b0b3Daniel Veillard if self.__io == None: 44c6d4a933f017b17cacdf2a6f6505faf8d945b0b3Daniel Veillard return(-1) 45c6d4a933f017b17cacdf2a6f6505faf8d945b0b3Daniel Veillard self.__io.flush() 46c6d4a933f017b17cacdf2a6f6505faf8d945b0b3Daniel Veillard return(0) 47c6d4a933f017b17cacdf2a6f6505faf8d945b0b3Daniel Veillard 48c6d4a933f017b17cacdf2a6f6505faf8d945b0b3Daniel Veillard def io_read(self, len = -1): 49c6d4a933f017b17cacdf2a6f6505faf8d945b0b3Daniel Veillard if self.__io == None: 50c6d4a933f017b17cacdf2a6f6505faf8d945b0b3Daniel Veillard return(-1) 51c6d4a933f017b17cacdf2a6f6505faf8d945b0b3Daniel Veillard if len < 0: 52c6d4a933f017b17cacdf2a6f6505faf8d945b0b3Daniel Veillard return(self.__io.read()) 53c6d4a933f017b17cacdf2a6f6505faf8d945b0b3Daniel Veillard return(self.__io.read(len)) 54c6d4a933f017b17cacdf2a6f6505faf8d945b0b3Daniel Veillard 55c6d4a933f017b17cacdf2a6f6505faf8d945b0b3Daniel Veillard def io_write(self, str, len = -1): 56c6d4a933f017b17cacdf2a6f6505faf8d945b0b3Daniel Veillard if self.__io == None: 57c6d4a933f017b17cacdf2a6f6505faf8d945b0b3Daniel Veillard return(-1) 58c6d4a933f017b17cacdf2a6f6505faf8d945b0b3Daniel Veillard if len < 0: 59c6d4a933f017b17cacdf2a6f6505faf8d945b0b3Daniel Veillard return(self.__io.write(str)) 60c6d4a933f017b17cacdf2a6f6505faf8d945b0b3Daniel Veillard return(self.__io.write(str, len)) 61c6d4a933f017b17cacdf2a6f6505faf8d945b0b3Daniel Veillard 62c6d4a933f017b17cacdf2a6f6505faf8d945b0b3Daniel Veillardclass ioReadWrapper(ioWrapper): 63c6d4a933f017b17cacdf2a6f6505faf8d945b0b3Daniel Veillard def __init__(self, _obj, enc = ""): 64c6d4a933f017b17cacdf2a6f6505faf8d945b0b3Daniel Veillard ioWrapper.__init__(self, _obj) 65c6d4a933f017b17cacdf2a6f6505faf8d945b0b3Daniel Veillard self._o = libxml2mod.xmlCreateInputBuffer(self, enc) 66c6d4a933f017b17cacdf2a6f6505faf8d945b0b3Daniel Veillard 67c6d4a933f017b17cacdf2a6f6505faf8d945b0b3Daniel Veillard def __del__(self): 68c6d4a933f017b17cacdf2a6f6505faf8d945b0b3Daniel Veillard print "__del__" 69c6d4a933f017b17cacdf2a6f6505faf8d945b0b3Daniel Veillard self.io_close() 70c6d4a933f017b17cacdf2a6f6505faf8d945b0b3Daniel Veillard if self._o != None: 71c6d4a933f017b17cacdf2a6f6505faf8d945b0b3Daniel Veillard libxml2mod.xmlFreeParserInputBuffer(self._o) 72c6d4a933f017b17cacdf2a6f6505faf8d945b0b3Daniel Veillard self._o = None 73c6d4a933f017b17cacdf2a6f6505faf8d945b0b3Daniel Veillard 74c6d4a933f017b17cacdf2a6f6505faf8d945b0b3Daniel Veillard def close(self): 75c6d4a933f017b17cacdf2a6f6505faf8d945b0b3Daniel Veillard self.io_close() 76c6d4a933f017b17cacdf2a6f6505faf8d945b0b3Daniel Veillard if self._o != None: 77c6d4a933f017b17cacdf2a6f6505faf8d945b0b3Daniel Veillard libxml2mod.xmlFreeParserInputBuffer(self._o) 78c6d4a933f017b17cacdf2a6f6505faf8d945b0b3Daniel Veillard self._o = None 79c6d4a933f017b17cacdf2a6f6505faf8d945b0b3Daniel Veillard 80c6d4a933f017b17cacdf2a6f6505faf8d945b0b3Daniel Veillardclass ioWriteWrapper(ioWrapper): 81c6d4a933f017b17cacdf2a6f6505faf8d945b0b3Daniel Veillard def __init__(self, _obj, enc = ""): 82c6d4a933f017b17cacdf2a6f6505faf8d945b0b3Daniel Veillard ioWrapper.__init__(self, _obj) 83c6d4a933f017b17cacdf2a6f6505faf8d945b0b3Daniel Veillard self._o = libxml2mod.xmlCreateOutputBuffer(self, enc) 84c6d4a933f017b17cacdf2a6f6505faf8d945b0b3Daniel Veillard 85c6d4a933f017b17cacdf2a6f6505faf8d945b0b3Daniel Veillard def __del__(self): 86c6d4a933f017b17cacdf2a6f6505faf8d945b0b3Daniel Veillard print "__del__" 87c6d4a933f017b17cacdf2a6f6505faf8d945b0b3Daniel Veillard self.io_close() 88c6d4a933f017b17cacdf2a6f6505faf8d945b0b3Daniel Veillard if self._o != None: 89c6d4a933f017b17cacdf2a6f6505faf8d945b0b3Daniel Veillard libxml2mod.xmlOutputBufferClose(self._o) 90c6d4a933f017b17cacdf2a6f6505faf8d945b0b3Daniel Veillard self._o = None 91c6d4a933f017b17cacdf2a6f6505faf8d945b0b3Daniel Veillard 92c6d4a933f017b17cacdf2a6f6505faf8d945b0b3Daniel Veillard def close(self): 93c6d4a933f017b17cacdf2a6f6505faf8d945b0b3Daniel Veillard self.io_close() 94c6d4a933f017b17cacdf2a6f6505faf8d945b0b3Daniel Veillard if self._o != None: 95c6d4a933f017b17cacdf2a6f6505faf8d945b0b3Daniel Veillard libxml2mod.xmlOutputBufferClose(self._o) 96c6d4a933f017b17cacdf2a6f6505faf8d945b0b3Daniel Veillard self._o = None 97c6d4a933f017b17cacdf2a6f6505faf8d945b0b3Daniel Veillard 988d24cc189845663509623fbd6b5106cc01266994Daniel Veillard# 998d24cc189845663509623fbd6b5106cc01266994Daniel Veillard# Example of a class to handle SAX events 1008d24cc189845663509623fbd6b5106cc01266994Daniel Veillard# 1018d24cc189845663509623fbd6b5106cc01266994Daniel Veillardclass SAXCallback: 1028d24cc189845663509623fbd6b5106cc01266994Daniel Veillard """Base class for SAX handlers""" 1038d24cc189845663509623fbd6b5106cc01266994Daniel Veillard def startDocument(self): 1048d24cc189845663509623fbd6b5106cc01266994Daniel Veillard """called at the start of the document""" 1058d24cc189845663509623fbd6b5106cc01266994Daniel Veillard pass 1068d24cc189845663509623fbd6b5106cc01266994Daniel Veillard 1078d24cc189845663509623fbd6b5106cc01266994Daniel Veillard def endDocument(self): 1088d24cc189845663509623fbd6b5106cc01266994Daniel Veillard """called at the end of the document""" 1098d24cc189845663509623fbd6b5106cc01266994Daniel Veillard pass 1108d24cc189845663509623fbd6b5106cc01266994Daniel Veillard 1118d24cc189845663509623fbd6b5106cc01266994Daniel Veillard def startElement(self, tag, attrs): 1128d24cc189845663509623fbd6b5106cc01266994Daniel Veillard """called at the start of every element, tag is the name of 1138d24cc189845663509623fbd6b5106cc01266994Daniel Veillard the element, attrs is a dictionary of the element's attributes""" 1148d24cc189845663509623fbd6b5106cc01266994Daniel Veillard pass 1158d24cc189845663509623fbd6b5106cc01266994Daniel Veillard 1168d24cc189845663509623fbd6b5106cc01266994Daniel Veillard def endElement(self, tag): 1178d24cc189845663509623fbd6b5106cc01266994Daniel Veillard """called at the start of every element, tag is the name of 1188d24cc189845663509623fbd6b5106cc01266994Daniel Veillard the element""" 1198d24cc189845663509623fbd6b5106cc01266994Daniel Veillard pass 1208d24cc189845663509623fbd6b5106cc01266994Daniel Veillard 1218d24cc189845663509623fbd6b5106cc01266994Daniel Veillard def characters(self, data): 1228d24cc189845663509623fbd6b5106cc01266994Daniel Veillard """called when character data have been read, data is the string 1238d24cc189845663509623fbd6b5106cc01266994Daniel Veillard containing the data, multiple consecutive characters() callback 1248d24cc189845663509623fbd6b5106cc01266994Daniel Veillard are possible.""" 1258d24cc189845663509623fbd6b5106cc01266994Daniel Veillard pass 1268d24cc189845663509623fbd6b5106cc01266994Daniel Veillard 1278d24cc189845663509623fbd6b5106cc01266994Daniel Veillard def cdataBlock(self, data): 1288d24cc189845663509623fbd6b5106cc01266994Daniel Veillard """called when CDATA section have been read, data is the string 1298d24cc189845663509623fbd6b5106cc01266994Daniel Veillard containing the data, multiple consecutive cdataBlock() callback 1308d24cc189845663509623fbd6b5106cc01266994Daniel Veillard are possible.""" 1318d24cc189845663509623fbd6b5106cc01266994Daniel Veillard pass 1328d24cc189845663509623fbd6b5106cc01266994Daniel Veillard 1338d24cc189845663509623fbd6b5106cc01266994Daniel Veillard def reference(self, name): 1348d24cc189845663509623fbd6b5106cc01266994Daniel Veillard """called when an entity reference has been found""" 1358d24cc189845663509623fbd6b5106cc01266994Daniel Veillard pass 1368d24cc189845663509623fbd6b5106cc01266994Daniel Veillard 1378d24cc189845663509623fbd6b5106cc01266994Daniel Veillard def ignorableWhitespace(self, data): 1388d24cc189845663509623fbd6b5106cc01266994Daniel Veillard """called when potentially ignorable white spaces have been found""" 1398d24cc189845663509623fbd6b5106cc01266994Daniel Veillard pass 1408d24cc189845663509623fbd6b5106cc01266994Daniel Veillard 1418d24cc189845663509623fbd6b5106cc01266994Daniel Veillard def processingInstruction(self, target, data): 1428d24cc189845663509623fbd6b5106cc01266994Daniel Veillard """called when a PI has been found, target contains the PI name and 1438d24cc189845663509623fbd6b5106cc01266994Daniel Veillard data is the associated data in the PI""" 1448d24cc189845663509623fbd6b5106cc01266994Daniel Veillard pass 1458d24cc189845663509623fbd6b5106cc01266994Daniel Veillard 1468d24cc189845663509623fbd6b5106cc01266994Daniel Veillard def comment(self, content): 1478d24cc189845663509623fbd6b5106cc01266994Daniel Veillard """called when a comment has been found, content contains the comment""" 1488d24cc189845663509623fbd6b5106cc01266994Daniel Veillard pass 1498d24cc189845663509623fbd6b5106cc01266994Daniel Veillard 1508d24cc189845663509623fbd6b5106cc01266994Daniel Veillard def externalSubset(self, name, externalID, systemID): 1518d24cc189845663509623fbd6b5106cc01266994Daniel Veillard """called when a DOCTYPE declaration has been found, name is the 1528d24cc189845663509623fbd6b5106cc01266994Daniel Veillard DTD name and externalID, systemID are the DTD public and system 1538d24cc189845663509623fbd6b5106cc01266994Daniel Veillard identifier for that DTd if available""" 1548d24cc189845663509623fbd6b5106cc01266994Daniel Veillard pass 1558d24cc189845663509623fbd6b5106cc01266994Daniel Veillard 1568d24cc189845663509623fbd6b5106cc01266994Daniel Veillard def internalSubset(self, name, externalID, systemID): 1578d24cc189845663509623fbd6b5106cc01266994Daniel Veillard """called when a DOCTYPE declaration has been found, name is the 1588d24cc189845663509623fbd6b5106cc01266994Daniel Veillard DTD name and externalID, systemID are the DTD public and system 1598d24cc189845663509623fbd6b5106cc01266994Daniel Veillard identifier for that DTD if available""" 1608d24cc189845663509623fbd6b5106cc01266994Daniel Veillard pass 1618d24cc189845663509623fbd6b5106cc01266994Daniel Veillard 1628d24cc189845663509623fbd6b5106cc01266994Daniel Veillard def entityDecl(self, name, type, externalID, systemID, content): 1638d24cc189845663509623fbd6b5106cc01266994Daniel Veillard """called when an ENTITY declaration has been found, name is the 1648d24cc189845663509623fbd6b5106cc01266994Daniel Veillard entity name and externalID, systemID are the entity public and 1658d24cc189845663509623fbd6b5106cc01266994Daniel Veillard system identifier for that entity if available, type indicates 1668d24cc189845663509623fbd6b5106cc01266994Daniel Veillard the entity type, and content reports it's string content""" 1678d24cc189845663509623fbd6b5106cc01266994Daniel Veillard pass 1688d24cc189845663509623fbd6b5106cc01266994Daniel Veillard 1698d24cc189845663509623fbd6b5106cc01266994Daniel Veillard def notationDecl(self, name, externalID, systemID): 1708d24cc189845663509623fbd6b5106cc01266994Daniel Veillard """called when an NOTATION declaration has been found, name is the 1718d24cc189845663509623fbd6b5106cc01266994Daniel Veillard notation name and externalID, systemID are the notation public and 1728d24cc189845663509623fbd6b5106cc01266994Daniel Veillard system identifier for that notation if available""" 1738d24cc189845663509623fbd6b5106cc01266994Daniel Veillard pass 1748d24cc189845663509623fbd6b5106cc01266994Daniel Veillard 1758d24cc189845663509623fbd6b5106cc01266994Daniel Veillard def attributeDecl(self, elem, name, type, defi, defaultValue, nameList): 1768d24cc189845663509623fbd6b5106cc01266994Daniel Veillard """called when an ATTRIBUTE definition has been found""" 1778d24cc189845663509623fbd6b5106cc01266994Daniel Veillard pass 1788d24cc189845663509623fbd6b5106cc01266994Daniel Veillard 1798d24cc189845663509623fbd6b5106cc01266994Daniel Veillard def elementDecl(self, name, type, content): 1808d24cc189845663509623fbd6b5106cc01266994Daniel Veillard """called when an ELEMENT definition has been found""" 1818d24cc189845663509623fbd6b5106cc01266994Daniel Veillard pass 1828d24cc189845663509623fbd6b5106cc01266994Daniel Veillard 1838d24cc189845663509623fbd6b5106cc01266994Daniel Veillard def entityDecl(self, name, publicId, systemID, notationName): 1848d24cc189845663509623fbd6b5106cc01266994Daniel Veillard """called when an unparsed ENTITY declaration has been found, 1858d24cc189845663509623fbd6b5106cc01266994Daniel Veillard name is the entity name and publicId,, systemID are the entity 1868d24cc189845663509623fbd6b5106cc01266994Daniel Veillard public and system identifier for that entity if available, 1878d24cc189845663509623fbd6b5106cc01266994Daniel Veillard and notationName indicate the associated NOTATION""" 1888d24cc189845663509623fbd6b5106cc01266994Daniel Veillard pass 1898d24cc189845663509623fbd6b5106cc01266994Daniel Veillard 1908d24cc189845663509623fbd6b5106cc01266994Daniel Veillard def warning(self, msg): 1918d24cc189845663509623fbd6b5106cc01266994Daniel Veillard print msg 1928d24cc189845663509623fbd6b5106cc01266994Daniel Veillard 1938d24cc189845663509623fbd6b5106cc01266994Daniel Veillard def error(self, msg): 1948d24cc189845663509623fbd6b5106cc01266994Daniel Veillard raise parserError(msg) 1958d24cc189845663509623fbd6b5106cc01266994Daniel Veillard 1968d24cc189845663509623fbd6b5106cc01266994Daniel Veillard def fatalError(self, msg): 1978d24cc189845663509623fbd6b5106cc01266994Daniel Veillard raise parserError(msg) 1988d24cc189845663509623fbd6b5106cc01266994Daniel Veillard 1998d24cc189845663509623fbd6b5106cc01266994Daniel Veillard# 2001971ee2698cb84c7699c96d3302f00e20d42c0d3Daniel Veillard# This class is the ancestor of all the Node classes. It provides 2011971ee2698cb84c7699c96d3302f00e20d42c0d3Daniel Veillard# the basic functionalities shared by all nodes (and handle 2021971ee2698cb84c7699c96d3302f00e20d42c0d3Daniel Veillard# gracefylly the exception), like name, navigation in the tree, 2031e77438da7dd912885effa97b1079867d1e041beDaniel Veillard# doc reference, content access and serializing to a string or URI 2041971ee2698cb84c7699c96d3302f00e20d42c0d3Daniel Veillard# 20536ed5290a2dd1d44ddc0f102f6251156ad6965b9Daniel Veillardclass xmlCore: 206d2897fde0089a9f349f7a589c1e58a8e130a3d61Daniel Veillard def __init__(self, _obj=None): 207d2897fde0089a9f349f7a589c1e58a8e130a3d61Daniel Veillard if _obj != None: 20801a6d4170c87368621db478b4d98530265bb9b1fDaniel Veillard self._o = _obj; 20901a6d4170c87368621db478b4d98530265bb9b1fDaniel Veillard return 21001a6d4170c87368621db478b4d98530265bb9b1fDaniel Veillard self._o = None 211d2897fde0089a9f349f7a589c1e58a8e130a3d61Daniel Veillard 212d2897fde0089a9f349f7a589c1e58a8e130a3d61Daniel Veillard def __getattr__(self, attr): 213d2897fde0089a9f349f7a589c1e58a8e130a3d61Daniel Veillard if attr == "parent": 21401a6d4170c87368621db478b4d98530265bb9b1fDaniel Veillard ret = libxml2mod.parent(self._o) 21501a6d4170c87368621db478b4d98530265bb9b1fDaniel Veillard if ret == None: 21601a6d4170c87368621db478b4d98530265bb9b1fDaniel Veillard return None 21701a6d4170c87368621db478b4d98530265bb9b1fDaniel Veillard return xmlNode(_obj=ret) 218d2897fde0089a9f349f7a589c1e58a8e130a3d61Daniel Veillard elif attr == "properties": 21901a6d4170c87368621db478b4d98530265bb9b1fDaniel Veillard ret = libxml2mod.properties(self._o) 22001a6d4170c87368621db478b4d98530265bb9b1fDaniel Veillard if ret == None: 22101a6d4170c87368621db478b4d98530265bb9b1fDaniel Veillard return None 22201a6d4170c87368621db478b4d98530265bb9b1fDaniel Veillard return xmlAttr(_obj=ret) 22301a6d4170c87368621db478b4d98530265bb9b1fDaniel Veillard elif attr == "children": 22401a6d4170c87368621db478b4d98530265bb9b1fDaniel Veillard ret = libxml2mod.children(self._o) 22501a6d4170c87368621db478b4d98530265bb9b1fDaniel Veillard if ret == None: 22601a6d4170c87368621db478b4d98530265bb9b1fDaniel Veillard return None 22701a6d4170c87368621db478b4d98530265bb9b1fDaniel Veillard return xmlNode(_obj=ret) 22801a6d4170c87368621db478b4d98530265bb9b1fDaniel Veillard elif attr == "last": 22901a6d4170c87368621db478b4d98530265bb9b1fDaniel Veillard ret = libxml2mod.last(self._o) 23001a6d4170c87368621db478b4d98530265bb9b1fDaniel Veillard if ret == None: 23101a6d4170c87368621db478b4d98530265bb9b1fDaniel Veillard return None 23201a6d4170c87368621db478b4d98530265bb9b1fDaniel Veillard return xmlNode(_obj=ret) 23301a6d4170c87368621db478b4d98530265bb9b1fDaniel Veillard elif attr == "next": 23401a6d4170c87368621db478b4d98530265bb9b1fDaniel Veillard ret = libxml2mod.next(self._o) 23501a6d4170c87368621db478b4d98530265bb9b1fDaniel Veillard if ret == None: 23601a6d4170c87368621db478b4d98530265bb9b1fDaniel Veillard return None 23701a6d4170c87368621db478b4d98530265bb9b1fDaniel Veillard return xmlNode(_obj=ret) 23801a6d4170c87368621db478b4d98530265bb9b1fDaniel Veillard elif attr == "prev": 23901a6d4170c87368621db478b4d98530265bb9b1fDaniel Veillard ret = libxml2mod.prev(self._o) 24001a6d4170c87368621db478b4d98530265bb9b1fDaniel Veillard if ret == None: 24101a6d4170c87368621db478b4d98530265bb9b1fDaniel Veillard return None 24201a6d4170c87368621db478b4d98530265bb9b1fDaniel Veillard return xmlNode(_obj=ret) 24301a6d4170c87368621db478b4d98530265bb9b1fDaniel Veillard elif attr == "content": 24401a6d4170c87368621db478b4d98530265bb9b1fDaniel Veillard return libxml2mod.xmlNodeGetContent(self._o) 24501a6d4170c87368621db478b4d98530265bb9b1fDaniel Veillard elif attr == "name": 24601a6d4170c87368621db478b4d98530265bb9b1fDaniel Veillard return libxml2mod.name(self._o) 24701a6d4170c87368621db478b4d98530265bb9b1fDaniel Veillard elif attr == "type": 24801a6d4170c87368621db478b4d98530265bb9b1fDaniel Veillard return libxml2mod.type(self._o) 24901a6d4170c87368621db478b4d98530265bb9b1fDaniel Veillard elif attr == "doc": 25001a6d4170c87368621db478b4d98530265bb9b1fDaniel Veillard ret = libxml2mod.doc(self._o) 25101a6d4170c87368621db478b4d98530265bb9b1fDaniel Veillard if ret == None: 252f742d3417905e5a0f4785f9684c3a7427e139ca7Daniel Veillard if self.type == "document_xml" or self.type == "document_html": 253f742d3417905e5a0f4785f9684c3a7427e139ca7Daniel Veillard return xmlDoc(_obj=self._o) 254f742d3417905e5a0f4785f9684c3a7427e139ca7Daniel Veillard else: 255f742d3417905e5a0f4785f9684c3a7427e139ca7Daniel Veillard return None 256f742d3417905e5a0f4785f9684c3a7427e139ca7Daniel Veillard return xmlDoc(_obj=ret) 25701a6d4170c87368621db478b4d98530265bb9b1fDaniel Veillard raise AttributeError,attr 258d2897fde0089a9f349f7a589c1e58a8e130a3d61Daniel Veillard 25901a6d4170c87368621db478b4d98530265bb9b1fDaniel Veillard # 26001a6d4170c87368621db478b4d98530265bb9b1fDaniel Veillard # Those are common attributes to nearly all type of nodes 26101a6d4170c87368621db478b4d98530265bb9b1fDaniel Veillard # 262d2897fde0089a9f349f7a589c1e58a8e130a3d61Daniel Veillard def get_parent(self): 26301a6d4170c87368621db478b4d98530265bb9b1fDaniel Veillard ret = libxml2mod.parent(self._o) 26401a6d4170c87368621db478b4d98530265bb9b1fDaniel Veillard if ret == None: 26501a6d4170c87368621db478b4d98530265bb9b1fDaniel Veillard return None 26601a6d4170c87368621db478b4d98530265bb9b1fDaniel Veillard return xmlNode(_obj=ret) 267d2897fde0089a9f349f7a589c1e58a8e130a3d61Daniel Veillard def get_children(self): 26801a6d4170c87368621db478b4d98530265bb9b1fDaniel Veillard ret = libxml2mod.children(self._o) 26901a6d4170c87368621db478b4d98530265bb9b1fDaniel Veillard if ret == None: 27001a6d4170c87368621db478b4d98530265bb9b1fDaniel Veillard return None 27101a6d4170c87368621db478b4d98530265bb9b1fDaniel Veillard return xmlNode(_obj=ret) 272d2897fde0089a9f349f7a589c1e58a8e130a3d61Daniel Veillard def get_last(self): 27301a6d4170c87368621db478b4d98530265bb9b1fDaniel Veillard ret = libxml2mod.last(self._o) 27401a6d4170c87368621db478b4d98530265bb9b1fDaniel Veillard if ret == None: 27501a6d4170c87368621db478b4d98530265bb9b1fDaniel Veillard return None 27601a6d4170c87368621db478b4d98530265bb9b1fDaniel Veillard return xmlNode(_obj=ret) 277d2897fde0089a9f349f7a589c1e58a8e130a3d61Daniel Veillard def get_next(self): 27801a6d4170c87368621db478b4d98530265bb9b1fDaniel Veillard ret = libxml2mod.next(self._o) 27901a6d4170c87368621db478b4d98530265bb9b1fDaniel Veillard if ret == None: 28001a6d4170c87368621db478b4d98530265bb9b1fDaniel Veillard return None 28101a6d4170c87368621db478b4d98530265bb9b1fDaniel Veillard return xmlNode(_obj=ret) 2821971ee2698cb84c7699c96d3302f00e20d42c0d3Daniel Veillard def get_properties(self): 28301a6d4170c87368621db478b4d98530265bb9b1fDaniel Veillard ret = libxml2mod.properties(self._o) 28401a6d4170c87368621db478b4d98530265bb9b1fDaniel Veillard if ret == None: 28501a6d4170c87368621db478b4d98530265bb9b1fDaniel Veillard return None 28601a6d4170c87368621db478b4d98530265bb9b1fDaniel Veillard return xmlAttr(_obj=ret) 2871971ee2698cb84c7699c96d3302f00e20d42c0d3Daniel Veillard def get_doc(self): 28801a6d4170c87368621db478b4d98530265bb9b1fDaniel Veillard ret = libxml2mod.doc(self._o) 28901a6d4170c87368621db478b4d98530265bb9b1fDaniel Veillard if ret == None: 29001a6d4170c87368621db478b4d98530265bb9b1fDaniel Veillard return None 29101a6d4170c87368621db478b4d98530265bb9b1fDaniel Veillard return xmlDoc(_obj=ret) 292d2897fde0089a9f349f7a589c1e58a8e130a3d61Daniel Veillard def get_prev(self): 29301a6d4170c87368621db478b4d98530265bb9b1fDaniel Veillard ret = libxml2mod.prev(self._o) 29401a6d4170c87368621db478b4d98530265bb9b1fDaniel Veillard if ret == None: 29501a6d4170c87368621db478b4d98530265bb9b1fDaniel Veillard return None 29601a6d4170c87368621db478b4d98530265bb9b1fDaniel Veillard return xmlNode(_obj=ret) 297d2897fde0089a9f349f7a589c1e58a8e130a3d61Daniel Veillard def get_content(self): 29801a6d4170c87368621db478b4d98530265bb9b1fDaniel Veillard return libxml2mod.xmlNodeGetContent(self._o) 2991971ee2698cb84c7699c96d3302f00e20d42c0d3Daniel Veillard def getContent(self): 30001a6d4170c87368621db478b4d98530265bb9b1fDaniel Veillard return libxml2mod.xmlNodeGetContent(self._o) 301d2897fde0089a9f349f7a589c1e58a8e130a3d61Daniel Veillard def get_name(self): 30201a6d4170c87368621db478b4d98530265bb9b1fDaniel Veillard return libxml2mod.name(self._o) 303d2897fde0089a9f349f7a589c1e58a8e130a3d61Daniel Veillard def get_type(self): 30401a6d4170c87368621db478b4d98530265bb9b1fDaniel Veillard return libxml2mod.type(self._o) 305d2897fde0089a9f349f7a589c1e58a8e130a3d61Daniel Veillard def get_doc(self): 30601a6d4170c87368621db478b4d98530265bb9b1fDaniel Veillard ret = libxml2mod.doc(self._o) 30701a6d4170c87368621db478b4d98530265bb9b1fDaniel Veillard if ret == None: 30801a6d4170c87368621db478b4d98530265bb9b1fDaniel Veillard return None 309f742d3417905e5a0f4785f9684c3a7427e139ca7Daniel Veillard return xmlDoc(_obj=ret) 310d2897fde0089a9f349f7a589c1e58a8e130a3d61Daniel Veillard def free(self): 3115e5c2d0a93e3e1bef0aaa63500cbbbd53e6a4063Daniel Veillard libxml2mod.freeDoc(self._o) 3121e77438da7dd912885effa97b1079867d1e041beDaniel Veillard 3131e77438da7dd912885effa97b1079867d1e041beDaniel Veillard # 3141e77438da7dd912885effa97b1079867d1e041beDaniel Veillard # Serialization routines, the optional arguments have the following 3151e77438da7dd912885effa97b1079867d1e041beDaniel Veillard # meaning: 3161e77438da7dd912885effa97b1079867d1e041beDaniel Veillard # encoding: string to ask saving in a specific encoding 31712171c4db1493e7b341a719a3705011c54f5e819Daniel Veillard # format: if 1 the serializer is asked to indent the output 3181e77438da7dd912885effa97b1079867d1e041beDaniel Veillard # 3191e77438da7dd912885effa97b1079867d1e041beDaniel Veillard def serialize(self, encoding = None, format = 0): 3201e77438da7dd912885effa97b1079867d1e041beDaniel Veillard return libxml2mod.serializeNode(self._o, encoding, format) 3211e77438da7dd912885effa97b1079867d1e041beDaniel Veillard def saveTo(self, file, encoding = None, format = 0): 3221e77438da7dd912885effa97b1079867d1e041beDaniel Veillard return libxml2mod.saveNodeTo(self._o, file, encoding, format) 32301a6d4170c87368621db478b4d98530265bb9b1fDaniel Veillard 324f742d3417905e5a0f4785f9684c3a7427e139ca7Daniel Veillard # 325f742d3417905e5a0f4785f9684c3a7427e139ca7Daniel Veillard # Selecting nodes using XPath, a bit slow because the context 326f742d3417905e5a0f4785f9684c3a7427e139ca7Daniel Veillard # is allocated/freed every time but convenient. 327f742d3417905e5a0f4785f9684c3a7427e139ca7Daniel Veillard # 328f742d3417905e5a0f4785f9684c3a7427e139ca7Daniel Veillard def xpathEval(self, expr): 329f742d3417905e5a0f4785f9684c3a7427e139ca7Daniel Veillard doc = self.doc 330f742d3417905e5a0f4785f9684c3a7427e139ca7Daniel Veillard if doc == None: 331f742d3417905e5a0f4785f9684c3a7427e139ca7Daniel Veillard return None 332f742d3417905e5a0f4785f9684c3a7427e139ca7Daniel Veillard ctxt = doc.xpathNewContext() 333f742d3417905e5a0f4785f9684c3a7427e139ca7Daniel Veillard ctxt.setContextNode(self) 334f742d3417905e5a0f4785f9684c3a7427e139ca7Daniel Veillard res = ctxt.xpathEval(expr) 335f742d3417905e5a0f4785f9684c3a7427e139ca7Daniel Veillard ctxt.xpathFreeContext() 336f742d3417905e5a0f4785f9684c3a7427e139ca7Daniel Veillard return res 337f742d3417905e5a0f4785f9684c3a7427e139ca7Daniel Veillard 33836ed5290a2dd1d44ddc0f102f6251156ad6965b9Daniel Veillard# 3391971ee2698cb84c7699c96d3302f00e20d42c0d3Daniel Veillard# converters to present a nicer view of the XPath returns 3401971ee2698cb84c7699c96d3302f00e20d42c0d3Daniel Veillard# 3411971ee2698cb84c7699c96d3302f00e20d42c0d3Daniel Veillarddef nodeWrap(o): 3421971ee2698cb84c7699c96d3302f00e20d42c0d3Daniel Veillard # TODO try to cast to the most appropriate node class 3435e5c2d0a93e3e1bef0aaa63500cbbbd53e6a4063Daniel Veillard name = libxml2mod.name(o) 3441971ee2698cb84c7699c96d3302f00e20d42c0d3Daniel Veillard if name == "element" or name == "text": 3451971ee2698cb84c7699c96d3302f00e20d42c0d3Daniel Veillard return xmlNode(_obj=o) 3461971ee2698cb84c7699c96d3302f00e20d42c0d3Daniel Veillard if name == "attribute": 3471971ee2698cb84c7699c96d3302f00e20d42c0d3Daniel Veillard return xmlAttr(_obj=o) 3481971ee2698cb84c7699c96d3302f00e20d42c0d3Daniel Veillard if name[0:8] == "document": 3491971ee2698cb84c7699c96d3302f00e20d42c0d3Daniel Veillard return xmlDoc(_obj=o) 3501971ee2698cb84c7699c96d3302f00e20d42c0d3Daniel Veillard if name[0:8] == "namespace": 3511971ee2698cb84c7699c96d3302f00e20d42c0d3Daniel Veillard return xmlNs(_obj=o) 3521971ee2698cb84c7699c96d3302f00e20d42c0d3Daniel Veillard if name == "elem_decl": 3531971ee2698cb84c7699c96d3302f00e20d42c0d3Daniel Veillard return xmlElement(_obj=o) 3541971ee2698cb84c7699c96d3302f00e20d42c0d3Daniel Veillard if name == "attribute_decl": 3551971ee2698cb84c7699c96d3302f00e20d42c0d3Daniel Veillard return xmlAtribute(_obj=o) 3561971ee2698cb84c7699c96d3302f00e20d42c0d3Daniel Veillard if name == "entity_decl": 3571971ee2698cb84c7699c96d3302f00e20d42c0d3Daniel Veillard return xmlEntity(_obj=o) 3581971ee2698cb84c7699c96d3302f00e20d42c0d3Daniel Veillard if name == "dtd": 3591971ee2698cb84c7699c96d3302f00e20d42c0d3Daniel Veillard return xmlAttr(_obj=o) 3601971ee2698cb84c7699c96d3302f00e20d42c0d3Daniel Veillard return xmlNode(_obj=o) 3611971ee2698cb84c7699c96d3302f00e20d42c0d3Daniel Veillard 3621971ee2698cb84c7699c96d3302f00e20d42c0d3Daniel Veillarddef xpathObjectRet(o): 3631971ee2698cb84c7699c96d3302f00e20d42c0d3Daniel Veillard if type(o) == type([]) or type(o) == type(()): 3641971ee2698cb84c7699c96d3302f00e20d42c0d3Daniel Veillard ret = map(lambda x: nodeWrap(x), o) 36501a6d4170c87368621db478b4d98530265bb9b1fDaniel Veillard return ret 3661971ee2698cb84c7699c96d3302f00e20d42c0d3Daniel Veillard return o 3671971ee2698cb84c7699c96d3302f00e20d42c0d3Daniel Veillard 3681971ee2698cb84c7699c96d3302f00e20d42c0d3Daniel Veillard# 369a7340c830e4bddd86201cfdb97ac81e30b0dee62Daniel Veillard# register an XPath function 370a7340c830e4bddd86201cfdb97ac81e30b0dee62Daniel Veillard# 371a7340c830e4bddd86201cfdb97ac81e30b0dee62Daniel Veillarddef registerXPathFunction(ctxt, name, ns_uri, f): 3725e5c2d0a93e3e1bef0aaa63500cbbbd53e6a4063Daniel Veillard ret = libxml2mod.xmlRegisterXPathFunction(ctxt, name, ns_uri, f) 373a7340c830e4bddd86201cfdb97ac81e30b0dee62Daniel Veillard 374797a565a2f6a2c0a8480670174e9eaef30d271a4Daniel Veillard 375a7340c830e4bddd86201cfdb97ac81e30b0dee62Daniel Veillard# 37636ed5290a2dd1d44ddc0f102f6251156ad6965b9Daniel Veillard# Everything below this point is automatically generated 37736ed5290a2dd1d44ddc0f102f6251156ad6965b9Daniel Veillard# 3781971ee2698cb84c7699c96d3302f00e20d42c0d3Daniel Veillard 379