2013-06-25 2 views
2

Рассмотрим этот XML:E4X XML фильтрации и только один результат

<root> 
    <node> 
     <subNode>123</subNode> 
     <anotherNode>abc</anotherNode> 
    </node> 
    <node> 
     <anotherNode>abc</anotherNode> 
    </node> 
</root> 

Это работает, потому что E4X находит только 1 матч, и возвращает XML вместо XMLList,:

trace(myXml.node.subNode); // 123 

Но почему это бросает Error #1065: Variable subNode is not defined?

trace(myXml.node.(subNode == 123).anotherNode); 

Почему это не отслеживается <anotherNode>abc</anothernode>?

ответ

1

Это не работает, потому что игрок пытается найти subNode в каждом node, и он не может, поэтому ReferenceError исключения.

В этом случае вы можете использовать hasOwnProperty метод, чтобы гарантировать, что свойство существует:

trace(myXml.node.(hasOwnProperty("subNode") && subNode == 123).anotherNode); 
0

Я проверил его, кажется, что у второго узла нет поднабора. Поэтому попробуйте добавить subNode (хотя я думаю, что должен быть другой способ решить эту проблему).

<root> 
    <node> 
     <subNode>123</subNode> 
     <anotherNode>abc</anotherNode> 
    </node> 
    <node> 
     <subNode>321</subNode> 
     <anotherNode>abc</anotherNode> 
    </node> 
</root> 
+0

Это очевидно, что второй узел не получил подузел, что это именно моя точка. Я знаю, что это не работает, потому что E4X находит только один результат и, следовательно, возвращает XML вместо XMLList. Мой вопрос заключается в том, почему это влияет на возможности фильтрации E4X. – Pier