![]() |
|
||||||||||
|
|||||
|
Регистрация: Apr 2008
Сообщений: 82
|
Пишу класс, наследующий XML. Хочу добавить методы свои и стойства.
class hvClasses.CDataNode extends XML
{
private var xmlData:XML;
.............
public function byStr(index:String):CDataNode
{
var res:CDataNode = null;
for (var i = 0; i<=xmlData.childNodes.length-1; i++)
{
if (xmlData.childNodes[i].nodeName == index)
{
res = CDataNode(xmlData.childNodes[i]);
break;
}
}
return res;
}
var myNode = new CDataNode();
myNode.ignoreWhite = true;
myNode.loadFromFile("circus.xml");
myNode.onLoad = function(success) {
// trace(myNode);
trace(myNode.status);
trace(myNode.byStr('body'));
// trace('count ' + myNode.byStr('body').byStr('hall').count);
// trace('attrs ' + myNode.byStr('body').byStr('hall').attrCount);
// trace('depth ' + myNode.byStr('body').byStr('hall').depth(true));
}
|
|
|||||
|
глянь, такой тест вполне себе работает:
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:CDataNode = childNodes[i];
if (node.nodeName == index)
{
return node;
}
}
return null;
}
}
|
|
|||||
|
Регистрация: Apr 2008
Сообщений: 82
|
Спасибо, работает.
Получается, что явное приведение типов не срабатывает, а срабатывает неявное. А если мне надо написать что-то типа Тут вроде неявное не прокатывает уже, потому что у parentNode тип не XML, а XMLNode. |
|
|||||
|
Регистрация: Apr 2008
Сообщений: 82
|
Непонятно, почему метод byStr не даёт себя вызвать 2 раза подряд, например:
Никакие попятки приведения типов в методах parent и root почему-то не срабатывают. |
|
|||||
|
ты прав, надо внимательнее с типами
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;
}
}
|
|
|||||
|
Регистрация: Apr 2008
Сообщений: 82
|
А зачем тут firstChild в аргументе конструктора?
|
|
|||||
|
дада, сори
действительно, нужны же все дети: 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 xmlStr:String = node.childNodes.join("");
var newCDataNode:CDataNode = new CDataNode(xmlStr);
return newCDataNode;
}
}
return null;
}
}
|
|
|||||
|
Регистрация: Apr 2008
Сообщений: 82
|
Блин, при реализации через toString() как -то не так всё получается, внешний узел имени не имеет, ему соответствующий текст из документа попадает в содержимое узла...
Спасибо. Но вообще, при создании новых объектов связи теряются с родительскими элементами, дерево ломается. Надо как-то по-дургому выпутываться.. Последний раз редактировалось iNils; 22.04.2008 в 17:03. |
|
|||||
|
Регистрация: Apr 2008
Сообщений: 82
|
Блин, так куда денутся проблемы с приведением типов?
Кроме того, я потеряю status и onLoad, к примеру. |
![]() |
![]() |
Часовой пояс GMT +4, время: 20:14. |
|
|
« Предыдущая тема | Следующая тема » |
|
|