Skip to content

Commit 3daab98

Browse files
committed
Make DOM work right with namespaces, probably
1 parent 61c7700 commit 3daab98

File tree

2 files changed

+17
-24
lines changed

2 files changed

+17
-24
lines changed

src/html5lib/treebuilders/dom.py

Lines changed: 17 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -22,34 +22,30 @@ def getDomModule(DomImplementation):
2222

2323
def getDomBuilder(DomImplementation):
2424
Dom = DomImplementation
25-
infoset_filter = ihatexml.InfosetFilter()
2625
class AttrList:
2726
def __init__(self, element):
2827
self.element = element
2928
def __iter__(self):
3029
return self.element.attributes.items().__iter__()
3130
def __setitem__(self, name, value):
32-
self.element.setAttribute(infoset_filter.coerceAttribute(name),
33-
infoset_filter.coerceCharacters(value))
31+
self.element.setAttribute(name, value)
3432
def items(self):
35-
return [(infoset_filter.fromXmlName(item[0]), item[1]) for item in
33+
return [(item[0], item[1]) for item in
3634
self.element.attributes.items()]
3735
def keys(self):
38-
return [infoset_filter.fromXmlName(item) for item in
39-
self.element.attributes.keys()]
36+
return self.element.attributes.keys()
4037
def __getitem__(self, name):
41-
name = infoset_filter.toXmlName(name)
4238
return self.element.getAttribute(name)
4339

4440
def __contains__(self, name):
4541
if isinstance(name, tuple):
4642
raise NotImplementedError
4743
else:
48-
return self.element.hasAttribute(infoset_filter.toXmlName(name))
44+
return self.element.hasAttribute(name)
4945

5046
class NodeBuilder(_base.Node):
5147
def __init__(self, element):
52-
_base.Node.__init__(self, element.localName)
48+
_base.Node.__init__(self, element.nodeName)
5349
self.element = element
5450

5551
namespace = property(lambda self:hasattr(self.element, "namespaceURI")
@@ -60,7 +56,6 @@ def appendChild(self, node):
6056
self.element.appendChild(node.element)
6157

6258
def insertText(self, data, insertBefore=None):
63-
data=infoset_filter.coerceCharacters(data)
6459
text = self.element.ownerDocument.createTextNode(data)
6560
if insertBefore:
6661
self.element.insertBefore(text, insertBefore.element)
@@ -91,17 +86,14 @@ def setAttributes(self, attributes):
9186
for name, value in attributes.items():
9287
if isinstance(name, tuple):
9388
if name[0] is not None:
94-
qualifiedName = (name[0] + ":" +
95-
infoset_filter.coerceAttribute(
96-
name[1]))
89+
qualifiedName = (name[0] + ":" + name[1])
9790
else:
98-
qualifiedName = infoset_filter.coerceAttribute(
99-
name[1])
91+
qualifiedName = name[1]
10092
self.element.setAttributeNS(name[2], qualifiedName,
10193
value)
10294
else:
10395
self.element.setAttribute(
104-
infoset_filter.coerceAttribute(name), value)
96+
name, value)
10597
attributes = property(getAttributes, setAttributes)
10698

10799
def cloneNode(self):
@@ -161,7 +153,7 @@ def getFragment(self):
161153
return _base.TreeBuilder.getFragment(self).element
162154

163155
def insertText(self, data, parent=None):
164-
data=infoset_filter.coerceCharacters(data)
156+
data=data
165157
if parent <> self:
166158
_base.TreeBuilder.insertText(self, data, parent)
167159
else:
@@ -210,11 +202,13 @@ def serializeElement(element, indent=0):
210202
i = 0
211203
attr = element.attributes.item(i)
212204
while attr:
213-
name = infoset_filter.fromXmlName(attr.localName)
205+
name = attr.nodeName
214206
value = attr.value
215207
ns = attr.namespaceURI
216208
if ns:
217-
name = "%s %s"%(constants.prefixes[ns], name)
209+
name = "%s %s"%(constants.prefixes[ns], attr.localName)
210+
else:
211+
name = attr.nodeName
218212
i += 1
219213
attr = element.attributes.item(i)
220214

@@ -241,21 +235,21 @@ def dom2sax(node, handler, nsmap={'xml':XML_NAMESPACE}):
241235
attr = node.getAttributeNode(attrname)
242236
if (attr.namespaceURI == XMLNS_NAMESPACE or
243237
(attr.namespaceURI == None and attr.nodeName.startswith('xmlns'))):
244-
prefix = (attr.localName != 'xmlns' and attr.localName or None)
238+
prefix = (attr.nodeName != 'xmlns' and attr.nodeName or None)
245239
handler.startPrefixMapping(prefix, attr.nodeValue)
246240
prefixes.append(prefix)
247241
nsmap = nsmap.copy()
248242
nsmap[prefix] = attr.nodeValue
249-
del attributes[(attr.namespaceURI, attr.localName)]
243+
del attributes[(attr.namespaceURI, attr.nodeName)]
250244

251245
# apply namespace declarations
252246
for attrname in node.attributes.keys():
253247
attr = node.getAttributeNode(attrname)
254248
if attr.namespaceURI == None and ':' in attr.nodeName:
255249
prefix = attr.nodeName.split(':')[0]
256250
if nsmap.has_key(prefix):
257-
del attributes[(attr.namespaceURI, attr.localName)]
258-
attributes[(nsmap[prefix],attr.localName)]=attr.nodeValue
251+
del attributes[(attr.namespaceURI, attr.nodeName)]
252+
attributes[(nsmap[prefix],attr.nodeName)]=attr.nodeValue
259253

260254
# SAX events
261255
ns = node.namespaceURI or nsmap.get(None,None)

src/html5lib/treewalkers/dom.py

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,6 @@
44
_ = gettext.gettext
55

66
import _base
7-
87
from html5lib.constants import voidElements
98

109
class TreeWalker(_base.NonRecursiveTreeWalker):

0 commit comments

Comments
 (0)