diff options
author | scoder <none@none> | 2007-06-21 10:35:13 +0200 |
---|---|---|
committer | scoder <none@none> | 2007-06-21 10:35:13 +0200 |
commit | 9d6515af47e9ef7c654035a84a1e26ea3a49b906 (patch) | |
tree | 5d252be3574b67b883ff9dcd2cd82acbec2eca69 | |
parent | d6d59fc9c6567fb5f32e4eb8daaa722eba81a45e (diff) | |
download | python-lxml-9d6515af47e9ef7c654035a84a1e26ea3a49b906.tar.gz |
[svn r2494] open any URL by default in ElementInclude, small optimisation
--HG--
branch : trunk
-rw-r--r-- | src/lxml/ElementInclude.py | 25 |
1 files changed, 17 insertions, 8 deletions
diff --git a/src/lxml/ElementInclude.py b/src/lxml/ElementInclude.py index e25e6368..725f56f0 100644 --- a/src/lxml/ElementInclude.py +++ b/src/lxml/ElementInclude.py @@ -47,6 +47,7 @@ import copy, etree from urlparse import urljoin +from urllib2 import urlopen try: set @@ -96,7 +97,12 @@ def _lxml_default_loader(href, parse, encoding=None, parser=None): if parse == "xml": data = etree.parse(href, parser).getroot() else: - data = open(href).read() + if "://" in href: + f = urlopen(href) + else: + f = open(href) + data = f.read() + f.close() if encoding: data = data.decode(encoding) return data @@ -122,14 +128,17 @@ def _wrap_et_loader(loader): # @throws IOError If the function fails to load a given resource. # @returns the node or its replacement if it was an XInclude node -def include(elem, loader=None): - if hasattr(elem, 'getroot'): - tree = elem +def include(elem, loader=None, base_url=None): + if base_url is None: + if hasattr(elem, 'getroot'): + tree = elem + elem = elem.getroot() + else: + tree = elem.getroottree() + if hasattr(tree, 'docinfo'): + base_url = tree.docinfo.URL + elif hasattr(elem, 'getroot'): elem = elem.getroot() - else: - tree = elem.getroottree() - if hasattr(tree, 'docinfo'): - base_url = tree.docinfo.URL _include(elem, loader, base_url=base_url) def _include(elem, loader=None, _parent_hrefs=None, base_url=None): |