Xml.nodeValue导致"坏节点类型"错误

时间:2017-11-04 09:04:54

标签: xml exception haxe xmlnode neko

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:count

     

Main.hx:28:0

     

Main.hx:34:节点类型错误,意外0

我无法完全理解nodeValue财产的运作原则。因此,我无法解决我的问题。这里有什么帮助吗?

P.S。我的配置是:Haxe + OpenFL瞄准Neko。

1 个答案:

答案 0 :(得分:5)

elementsNamed()返回XmlType.Element类型的节点,docs for 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]