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);
        }
    }

}

Выход:

Main.hx: 23: 6

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

Main.hx: 28: 0

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

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

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

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]
Другие вопросы по тегам