1.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000
1.2 +++ b/libxml2dom/macrolib.py Fri Jan 14 15:39:03 2005 +0000
1.3 @@ -0,0 +1,116 @@
1.4 +#!/usr/bin/env python
1.5 +
1.6 +"""
1.7 +DOM macros for libxml2.
1.8 +"""
1.9 +
1.10 +__version__ = "0.1.2"
1.11 +
1.12 +import xml.dom
1.13 +import libxml2
1.14 +import sys
1.15 +
1.16 +# NOTE: libxml2 seems to use UTF-8 throughout.
1.17 +
1.18 +def from_unicode(s):
1.19 + if type(s) == type(u""):
1.20 + return s.encode("utf-8")
1.21 + else:
1.22 + return s
1.23 +
1.24 +def to_unicode(s):
1.25 + if type(s) == type(""):
1.26 + return unicode(s, encoding="utf-8")
1.27 + else:
1.28 + return s
1.29 +
1.30 +_nodeTypes = {
1.31 + "attribute" : xml.dom.Node.ATTRIBUTE_NODE,
1.32 + "comment" : xml.dom.Node.COMMENT_NODE,
1.33 + "document_xml" : xml.dom.Node.DOCUMENT_NODE,
1.34 + "doctype" : xml.dom.Node.DOCUMENT_TYPE_NODE,
1.35 + "dtd" : xml.dom.Node.DOCUMENT_TYPE_NODE, # NOTE: Needs verifying.
1.36 + "element" : xml.dom.Node.ELEMENT_NODE,
1.37 + "entity" : xml.dom.Node.ENTITY_NODE,
1.38 + "entity_ref" : xml.dom.Node.ENTITY_REFERENCE_NODE,
1.39 + "notation" : xml.dom.Node.NOTATION_NODE,
1.40 + "pi" : xml.dom.Node.PROCESSING_INSTRUCTION_NODE,
1.41 + "text" : xml.dom.Node.TEXT_NODE
1.42 + }
1.43 +
1.44 +def Node_nodeType(node):
1.45 + global _nodesTypes
1.46 + return _nodeTypes[node.type]
1.47 +
1.48 +def Node_childNodes(node):
1.49 +
1.50 + # NOTE: Consider a generator instead.
1.51 +
1.52 + child_nodes = []
1.53 + node = node.children
1.54 + while node is not None:
1.55 + child_nodes.append(node)
1.56 + node = node.next
1.57 + return child_nodes
1.58 +
1.59 +def _getNs(node):
1.60 +
1.61 + "Internal namespace information retrieval."
1.62 +
1.63 + try:
1.64 + return node.ns()
1.65 + except libxml2.treeError:
1.66 + return None
1.67 +
1.68 +def Node_namespaceURI(node):
1.69 + ns = _getNs(node)
1.70 + if ns is not None:
1.71 + return to_unicode(ns.content)
1.72 + else:
1.73 + return None
1.74 +
1.75 +def Node_nodeValue(node):
1.76 + return to_unicode(node.content)
1.77 +
1.78 +def Node_prefix(node):
1.79 + ns = _getNs(node)
1.80 + if ns is not None:
1.81 + return to_unicode(ns.name)
1.82 + else:
1.83 + return None
1.84 +
1.85 +def Node_nodeName(node):
1.86 + prefix = Node_prefix(node)
1.87 + if prefix is not None:
1.88 + return prefix + ":" + Node_localName(node)
1.89 + else:
1.90 + return Node_localName(node)
1.91 +
1.92 +def Node_tagName(node):
1.93 + if node.type == "element":
1.94 + return Node_nodeName(node)
1.95 + else:
1.96 + return None
1.97 +
1.98 +def Node_localName(node):
1.99 + return to_unicode(node.name)
1.100 +
1.101 +def Node_parentNode(node):
1.102 + if node.type == "document_xml":
1.103 + return None
1.104 + else:
1.105 + return node.parent
1.106 +
1.107 +def Node_previousSibling(node):
1.108 + if node.prev is not None:
1.109 + return node.prev
1.110 + else:
1.111 + return None
1.112 +
1.113 +def Node_nextSibling(node):
1.114 + if node.next is not None:
1.115 + return node.next
1.116 + else:
1.117 + return None
1.118 +
1.119 +# vim: tabstop=4 expandtab shiftwidth=4