diff --git a/odoo/addons/base/ir/ir_ui_view.py b/odoo/addons/base/ir/ir_ui_view.py
index daa8d72f26f..7f9d0340f02 100644
--- a/odoo/addons/base/ir/ir_ui_view.py
+++ b/odoo/addons/base/ir/ir_ui_view.py
@@ -466,7 +466,7 @@ actual arch.
:return: a node in the source matching the spec
"""
if spec.tag == 'xpath':
- nodes = arch.xpath(spec.get('expr'))
+ nodes = etree.ETXPath(spec.get('expr'))(arch)
return nodes[0] if nodes else None
elif spec.tag == 'field':
# Only compare the field name: a field can be only once in a given view
diff --git a/odoo/addons/base/tests/test_qweb.py b/odoo/addons/base/tests/test_qweb.py
index c4b279c2f43..284cc104840 100644
--- a/odoo/addons/base/tests/test_qweb.py
+++ b/odoo/addons/base/tests/test_qweb.py
@@ -373,6 +373,52 @@ class TestQWebNS(TransactionCase):
self.assertEquals(len(cac_lines), 2)
self.assertEquals(result.count('Appel'), 2)
+ def test_render_static_xml_with_extension(self):
+ """ Test the extension of a view by an xpath expression on a ns prefixed element.
+ """
+ # primary view
+ view1 = self.env['ir.ui.view'].create({
+ 'name': "dummy",
+ 'type': 'qweb',
+ 'arch': """
+
+
+
+
+ Apples
+ Bananas
+
+
+
+
+ """
+ })
+ # extension patching the primary view
+ view2 = self.env['ir.ui.view'].create({
+ 'name': "dummy_ext",
+ 'type': 'qweb',
+ 'inherit_id': view1.id,
+ 'arch': """
+
+ Oranges
+
+ """
+ })
+
+ expected_result = """
+
+
+
+ Apples
+ Bananas
+ Oranges
+
+
+
+ """
+
+ self.assertEquals(dedent_and_strip(view1.with_context(check_view_ids=[view1.id, view2.id]).render()), dedent_and_strip(expected_result))
+
from copy import deepcopy
class FileSystemLoader(object):