The other obvious solution is to simply starve them out...

Archers on the walls are a very effective weapon defensively, but I find they rarely move them quickly enough if you decide to attack somewhere unexpected. They usually mass the archers around the gate, so attack some walls away from the gate, blow a hole, rush through to the city square and let the archers come to you. I did this to good effect as the seleucids against Capua (v-large stone walls).