Xml.nodeValue вызывает ошибку неверного типа узла

class Main extends Sprite 
{

    public function new() 
    {
        super();

        try 
        {
            var xml:Xml = Xml.parse("<count>6</count>");

            trace(xml.nodeType);

            for (x in xml.elementsNamed("count"))
            {
                trace(x.nodeName);
                trace(x.nodeType);
                trace(x.nodeValue);
            }
        } 
        catch (err:Dynamic) 
        {
            trace(err);
            Sys.exit(1);
        }
    }

}

Выход:

Основной.hx:23:6

Main.hx:27: количество

Основной.hx:28:0

Main.hx:34: Неверный тип узла, неожиданный 0

Не могу до конца понять принцип работы свойства nodeValue. Из-за этого не могу решить свою проблему. Любая помощь здесь?

P.S. Моя конфигурация: Haxe + OpenFL для Neko.


person Gulvan    schedule 04.11.2017    source источник


Ответы (1)


elementsNamed() возвращает узлы типа XmlType.Element, а в документах для nodeValue явно указывается:

Возвращает значение узла. Работает, только если узел Xml не является элементом или документом.

Таким образом, nodeValue будет работать для всех других возможных значений XmlType. В вашем случае значение, которое вы хотите получить, хранится в узле XmlType.PCData, и вы можете получить к нему доступ, используя firstChild():

for (x in xml.elementsNamed("count"))
{
    trace(x.firstChild().nodeType); // 1 - XmlType.PCData
    trace(x.firstChild().nodeValue); // 6
}

Полная структура <count>6</count> выглядит так:

[XmlType.Document] -> [XmlType.Element <count>] -> [XmlType.PCData 6]
person Gama11    schedule 04.11.2017