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