![]() |
|
||||||||||
|
|
|
|||||
|
Регистрация: Jul 2005
Сообщений: 34
|
Пишу рекурсивную функцию прохода по XML.
Данная радость должна возвращать инфу про исследуемый узел в виде массива, но, почему-то, делать этого не хочет, хотя все узлы пробегаются - я проверял. class XmlParser {
var xml:XML;
public function XmlParser() {
this.xml = new XML();
this.xml.ignoreWhite = true;
}
public function loadFromString(_string:String) {
this.xml.parseXML(_string);
}
function parseNode(_xmlNode) {
if (!_xmlNode) {
return false;
}
var curArray:Array = new Array();
var i:Number;
curArray["nodeName"] = _xmlNode.nodeName;
curArray["nodeType"] = _xmlNode.nodeType;
if (_xmlNode.nodeType == 1) {
for (i=0; i<_xmlNode.childNodes.length; i++) {
curNode = null;
var curNode:XMLNode = _xmlNode.childNodes[i];
if (curNode) {
curArray["childNodes"][i] = this.parseNode(curNode);
}
}
}
if ( _xmlNode.nodeType == 3 ) {
curArray["nodeValue"] = _xmlNode.nodeValue;
}
return curArray;
}
public function toArray() {
return this.parseNode(this.xml.firstChild);
}
}
пы.пы.сы. когда через дебаг пробую посмотреть List Variables, то массив он мне мой показывает, но никаких childNodes в нем нету =( - не пишется туды ничего.. |
|
|||||
|
Et cetera
Регистрация: Sep 2002
Сообщений: 30,787
|
А где объявление того, что curArray['childNodes'] — массив?
з.Ы. Про объявление public/private и типа возвращаемых данных умолчу. |
|
|||||
|
Регистрация: Jul 2005
Сообщений: 34
|
__etc, пасип. объявил, что массив, уже стало легче, но, все-же не все пока бегает.
на тему остального, так правильнее? =) class XmlParser {
private var xml:XML;
public function XmlParser() {
this.xml = new XML();
this.xml.ignoreWhite = true;
}
public function loadFromString(_string:String) {
this.xml.parseXML(_string);
}
public function parseNode(_xmlNode):Array{
if (!_xmlNode) {
return false;
}
var curArray:Array = new Array();
var i:Number;
curArray["nodeName"] = _xmlNode.nodeName;
curArray["nodeType"] = _xmlNode.nodeType;
if (_xmlNode.nodeType == 1) {
for (i=0; i<_xmlNode.childNodes.length; i++) {
curArray["childNodes"] = new Array();
curNode = null;
var curNode:XMLNode = _xmlNode.childNodes[i];
if (curNode) {
curArray["childNodes"][i] = this.parseNode(curNode);
}
}
}
if ( _xmlNode.nodeType == 3 ) {
curArray["nodeValue"] = _xmlNode.nodeValue;
}
return curArray;
}
public function toArray() {
return this.parseNode(this.xml.firstChild);
}
}
|
|
|||||
|
А зачем рекурсия?
Вот, писал когда-то чрезвычайно полезную функцию. function nextNode(node_xml:XMLNode):XMLNode {
if (node_xml.hasChildNodes() == true) return (node_xml.firstChild);
else while (node_xml.nextSibling == null && node_xml.parentNode != null) node_xml = node_xml.parentNode;
return (node_xml.nextSibling);
}
Позволяет просто перебрать все подряд ноды в дереве. Можно сделать перебор внутри одного нода, если поставить другие условия в while Последний раз редактировалось iNils; 02.10.2006 в 19:57. |
![]() |
![]() |
Часовой пояс GMT +4, время: 10:54. |
|
|
« Предыдущая тема | Следующая тема » |
|
|