ты прав, надо внимательнее с типами
byStr в предыдущем варианте возвращает XMLNode, а не CDataNode, декларация var node:CDataNode = childNodes[i]; ничего не дает, компилятор просто не может проверить тип childNodes[i]..
должно быть, видимо, так (хотя и не очень понятно зачем оно) :

Код:
class CDataNode extends XML
{
public function CDataNode(text:String)
{
super(text);
}
public function byStr(index:String):CDataNode
{
for (var i = 0; i<=childNodes.length; i++)
{
var node:XMLNode = childNodes[i];
if (node.nodeName == index)
{
var newCDataNode:CDataNode = new CDataNode(node.firstChild.toString());
return newCDataNode;
}
}
return null;
}
}