Although XML is more predictable, kinda have a defined structure and all that. I would go with scripts.
Rolling your own language(if you have the time, but usually this is not the best choice), or even implementing one.
There are LOTS of script languages out there, they're all nice, some examples:
Squirrel, Lua, Angel Script, Python, and many many many others.
The choice of script over XML is not easy. XML is a straight path, easy to follow. Scripts are kind hard to implement, but if well implemented, gives you plenty of freedom.
Scripts are awesome because they gives you an organization that you may be already used to, make it easier for conditional statements, loops, acessing data. And also you can even making npcs execute algorithms made on the script itself. See this Ragnarok Online NPC Example:
mes "Hi adventurer, what do you want to drink today?";
switch(Select("Water", "Potions", "Nothing"))
{
case 0:
if($money >= 100)
{
$money -= 100;
mes "here is your water.";
giveitem waterbottle_id, 1;
next;
}
else
{
mes "Sorry, you don't have enough money :/";
next;
}
break;
case 1:
mes "Sorry, we're out of potions today.";
next;
break;
default:
break;
}
mes "Thanks for coming have a nice day!";
close;
This follows a structured form, XML's are like if you were putting lots of labels and jumping over everywhere.
But of course, only choose script if the project really worth it, you have the time, and you're confident while managing VMs.