Fixed HTML parsing when several attributes have the same name.
authorFrederic Jolliton <frederic@jolliton.com>
Wed, 7 Sep 2005 15:45:19 +0000 (15:45 +0000)
committerFrederic Jolliton <frederic@jolliton.com>
Wed, 7 Sep 2005 15:45:19 +0000 (15:45 +0000)
 * Fixed HTML parsing by allowing several attributes with same name.
   Only the first of such set is kept.
git-archimport-id: frederic@jolliton.com--2005-main/tx--main--0.1--patch-3

htmltree.py

index 251a81c..e8e659c 100644 (file)
@@ -119,14 +119,21 @@ class Parser( HTMLParser ) :
 
                self.__closeElementsAsNeeded( tag )
 
+               attributeNodes = {}
                if not self.__caseSensitive :
-                       attrs = [
-                               Attribute( name.lower() , normalizeSpace( ( value , name )[ value is None ] ) )
-                               for name , value in attrs ]
+                       for name , value in attrs :
+                               name = name.lower()
+                               if value is None :
+                                       value = name
+                               if name not in attributeNodes :
+                                       attributeNodes[ name ] = normalizeSpace( value )
                else :
-                       attrs = [
-                               Attribute( name , normalizeSpace( ( value , name )[ value is None ] ) )
-                               for name , value in attrs ]
+                       for name , value in attrs :
+                               if value is None :
+                                       value = name
+                               if name not in attributeNodes :
+                                       attributeNodes[ name ] = normalizeSpace( value )
+               attrs = [ Attribute( name , value ) for name , value in attributeNodes.items() ]
                self.__stack.append( ( tag , attrs , [] ) )
 
        def handle_endtag( self , tag ) :