# File lib/xtemplate/xpath.rb, line 772
    def normalize(val)
      case val
      when Hash
        if( val[TextNode] && val.size == 1 )
          val = val[TextNode]
        end
      when XArray
        val = val.reject{|v| v.is_a?(String) && (v =~ /\A\s*\z/) }
        if( val.size > 1 )
          catch(:break){
            h = {}
            node_p = false
            val.each{|v|
              case v
              when Hash
                v.each{|k,x|
                  if( h[k] )
                    throw(:break)
                  else
                    h[k] = x
                    unless( k && (k[0] == ?@) )
                      node_p = true
                    end
                  end
                }
              else
                if( h[TextNode] )
                  throw(:break)
                else
                  h[TextNode] = v
                end
              end
            }
            if( h[TextNode] )
              if( h.size == 1 )
                h = h[TextNode]
              else
                if( node_p )
                  throw(:break)
                end
              end
            end
            val.clear
            val.push(h)
          }
        end
      when Array
        val.reject!{|x|x.nil?}
      end
      val
    end