Опубликован: 07.11.2006 | Уровень: специалист | Доступ: платный
Лекция 18:

XML

Грамотное написание XML-файла

Чтобы клиент Flash распознал документ XML, последний должен быть грамотно составлен. Когда мы говорим о грамотном применении XML, это означает то же, что и соблюдение синтаксических правил использования этого языка. В языке XML существуют несколько строгих синтаксических правил, причем некоторые из них относятся к той области, которую мы только что обсуждали.

Прежде всего, у всех документов XML должен быть корневой элемент. По существу, весь документ должен содержаться внутри простого элемента, называемого корневым узлом. Ниже приведенный пример составлен правильно.

<?xml version='1.0' ?>
<!-- members of The Beatles -->
<Beatles>
  <member>Lennon</member>
  <member>Ringo</member>
  <member>McCartney</member>
  <member>Harrison</member> 
</Beatles>

Следующий пример составлен некорректно, так как теги <member> и </member> должны содержаться внутри родительского узла.

<?xml version='l.0' ?>
<!-- members of The Beatles -->
<member>Lennon</member>
<member>Ringo</member>
<member>McCartney</member>
<member>Harrison</member>

Сообщение об ошибке

Если вы попытаетесь загрузить в веб-браузере файл XML, который составлен некорректно, вы получите сообщение о том, что XML не может быть отображен, а также будет указана причина этому. Например, если бы мы попытались открыть приведенный выше некорректный XML-код в веб-браузере, то получили бы следующий результат.


Вы получите сообщение о том, что страница XML не может быть отображена, а также указание причины, вызвавшей ошибку. Flash не может считывать XML-код, составленный некорректно, поэтому будьте внимательны при создании XML-файла.

Вложенные элементы

Элементы, находящиеся внутри других элементов, называется вложенными элементами. Если начальный тег находится перед завершением другого начального тега, то он является дочерним узлом этого узла и должен быть закрыт перед завершением родительского. В HTML этим правилом можно пренебрегать, что позволяет оставить наш пример в таком виде.

<b>
  полужирный (bold) текст
  <i>
    полужирный курсивный (bold italic) текст 
</b>
    курсивный (italic) текст 
    </i>

Однако, чтобы воспроизвести этот код в XML, нужно переписать его следующим образом.

<b>
  полужирный (bold) текст
  <i>
    полужирный курсивный (bold italic) текст 
    </i>
</b>
<i>
  курсивный (italic) текст 
</i>

Другим случаем, в котором HTML часто не проходит проверку на корректность в XML, является ситуация, где открытые теги не закрываются.

Это предложение<br> не пройдет проверку<br> на корректность для XML<br>

В XML теги <br> означают начало узла, содержащего другие узлы. Тег пустого узла должен содержать слеш перед конечной скобкой: <br/>. Так, пример, приведенный ниже, является корректным.

Это<br>коректное утверждение</br>

Это различие сильно облегчает распознавание документа программой-считывателем. Последняя может присваивать каждый найденный "бездетный" узел и текстовый узел текущему узлу. Когда программа находит начальный тег для узла с дочерними узлами, она начинает присваивать дочерние узлы этому узлу. Она присваивает каждый найденный узел узлу с дочерними узлами до тех пор, пока не найдет конечный тег этого узла.

Отступы

Вы могли обратить внимание на то, что большинство узлов располагается в их собственных строках, и когда появляются вложенные узлы, делается отступ. Отступы обычно используются для повышения удобочитаемости файла, однако никак не влияют на его функционирование. Но, строго говоря, это текстовый узел, и часто оказывается полезным его игнорирование. Считыватель Flash предоставляет тег ignoreWhite, который при установке на значение true, вызывает игнорирование любых дополнительных пробелов и переносов строк.

Имена

Имена узлов должны начинаться с буквы или символа подчеркивания и состоять из букв, чисел, символов подчеркивания, тире, двоеточий, но пробелов в них быть не должно. Также имя не может начинаться с XML.

<thisTagIsFine> <_this_one_is_2> <2Many re@$ons why this one fails/>
<xml wouldn't underst@nd th$s either>

XML также чувствителен к регистру букв. Если вы откроете тег с именем <Tag>, он не будет закрыт тегом </tag> или </TAG>, так как это совершенно другие имена элементов XML. Это означает, что вложенные элементы построены неправильно.

Как видно, правил совсем немного. Надеемся, вы получили о них должное представление и сможете следовать им в процессе работы.

Игорь Хан
Игорь Хан

у меня аналогичная ситуация. Однако, если взять пример из приложения (ball_motion_04_click for trial.fla) то след остается. при этом заметил, что в моем проекте в поле "One item in library" виден кружок, в то время как в приложенном примере такого кружка нет.

Вопрос знатокам, что не так?

Александр Коргапольцев
Александр Коргапольцев

объект созданый мной упорно не желает оставлять след(единственное что добился, так это то что шарик резво гоняется за курсором) функция duplicateMovieClip остаётся не активной, т.е. следа от объекта не остаётся, но если я тоже самый код вбиваю в учебный файл всё работает, не могу понять где я ошибаюсь и почему в документе созданном заново, не работает код начиная от функции duplicateMovieClip? 

Тамара Ионова
Тамара Ионова
Россия, Нижний Новгород, НГПУ, 2009
Магомед Алисултанов
Магомед Алисултанов
Россия, Волгоград, лицей 2