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]