diff -r 3ae2cd85a908 Lib/test/test_minidom.py --- a/Lib/test/test_minidom.py Sun Mar 09 11:18:16 2014 +0100 +++ b/Lib/test/test_minidom.py Tue Mar 11 14:13:56 2014 -0400 @@ -1527,6 +1527,37 @@ num_children_after = len(doc.childNodes) self.assertTrue(num_children_after == num_children_before - 1) + def testElementConstructor(self): + dom = parse(tstfile) + child1 = dom.createComment("Hello 1") + child2 = dom.createComment("Hello 2") + + attributes = { + "first": "1", + "second": "2", + } + + attributesNS = { + ("http://www.w3.org", "xmlns:python"): "http://www.python.org", + } + + element = xml.dom.minidom.Element( + "some_tag", + childNodes=[child1, child2], + attributes=attributes, + attributesNS=attributesNS) + + self.assertEqual(child1.data, element.childNodes[0].data) + self.assertEqual(child2.data, element.childNodes[1].data) + + for name, value in attributes.items(): + self.assertEqual(value, element.getAttribute(name)) + + self.assertEqual( + element.getAttributeNS( + "http://www.w3.org", "python"), + "http://www.python.org") + def test_main(): run_unittest(MinidomTest) diff -r 3ae2cd85a908 Lib/xml/dom/minidom.py --- a/Lib/xml/dom/minidom.py Sun Mar 09 11:18:16 2014 +0100 +++ b/Lib/xml/dom/minidom.py Tue Mar 11 14:13:56 2014 -0400 @@ -678,12 +678,17 @@ Node.ENTITY_REFERENCE_NODE) def __init__(self, tagName, namespaceURI=EMPTY_NAMESPACE, prefix=None, - localName=None): + localName=None, childNodes=None, attributes=None, + attributesNS=None): + self.ownerDocument = None self.parentNode = None self.tagName = self.nodeName = tagName self.prefix = prefix self.namespaceURI = namespaceURI self.childNodes = NodeList() + if childNodes: + for child in childNodes: + self.appendChild(child) self.nextSibling = self.previousSibling = None # Attribute dictionaries are lazily created @@ -696,6 +701,13 @@ # namespaces. self._attrs = None self._attrsNS = None + if attributes: + for name, value in attributes.items(): + self.setAttribute(name, value) + + if attributesNS: + for (namespace, name), value in attributesNS.items(): + self.setAttributeNS(namespace, name, value) def _ensure_attributes(self): if self._attrs is None: