E4X XML фильтрация и только один результат
Рассмотрим этот 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>
?
2 ответа
Решение
Это не работает, потому что игрок пытается найти subNode
в каждом node
и не может, так что ReferenceError
исключение брошено.
В этом случае вы можете использовать hasOwnProperty
Метод, чтобы убедиться, что свойство существует:
trace(myXml.node.(hasOwnProperty("subNode") && subNode == 123).anotherNode);
Я проверил это, кажется, что второй узел не имеет подузла. Поэтому попробуйте добавить subNode(хотя я думаю, что должен быть другой способ решить эту проблему).
<root>
<node>
<subNode>123</subNode>
<anotherNode>abc</anotherNode>
</node>
<node>
<subNode>321</subNode>
<anotherNode>abc</anotherNode>
</node>
</root>