Требуется / рекомендуется ли тестирование существования узлов в XML в ActionScript 3? - PullRequest
4 голосов
/ 05 мая 2011

Ниже приведен пример чтения XML с помощью ActionScript 3

var xml:XML = 
    <content>
        <a>Hello A</a>
        <b>Hello B</b>
        <c>
            <c1>Child C1</c1>
            <c2>Child C2</c2>
        </c>
    </content>;


trace(xml.a); // OP: Hello A
trace(xml.c.c1); // OP: Child C1
trace(xml.d); // OP: (nothing)
trace(xml.b);; // OP: Hello B

Я не вижу, как xml.d выводит пустую строку как ожидаемое поведение?Это нормально?В чем причина этого?

Мне кажется, что я должен делать это:

if(xml.d) trace(xml.d);

Можно ли полагаться на поведение пустой строки?То есть мне нужно проверить существование узла ??

Ответы [ 3 ]

4 голосов
/ 05 мая 2011

xml.d - это XMLList. Поскольку узел не существует, этот список будет пустым.
Вы можете проверить существование узла с помощью xml.d.length() (дает количество узлов d) или xml.d[0] (дает первый узел d, в этом случае будет нулевым).

0 голосов
/ 05 мая 2011

Если вы попытаетесь получить доступ к свойствам или методам несуществующего узла, AVM выдаст ошибку. Вы должны обернуть любой код, который может произойти сбой по известной причине в try{} catch(){}.

вот хорошее объяснение: http://www.kirupa.com/forum/showthread.php?p=1957523

0 голосов
/ 05 мая 2011

Единственный раз, когда у меня возникали проблемы с пустыми дочерними узлами, это когда я пытался оценить дочерние элементы пустого узла. Так что да, в этом случае вам нужно проверить пустую строку.

if(xml.d != "" ) trace(xml.d);

Возможно, вы также захотите прочитать о e4x

...