#xml #actionscript-3 #namespaces #e4x
#xml #actionscript-3 #пространства имен #e4x
Вопрос:
Может ли кто-нибудь объяснить мне, для чего именно предназначены пространства имен (xmlns = «…») в XML и как они должны использоваться при навигации по XML с использованием E4X (.. предпочтительно в ActionScript 3)?
Я не могу полностью понять их назначение и использование.
Ответ №1:
Теоретически пространства имен XML используются для того, чтобы избежать конфликта с именами тегов. Таким образом, я могу создать пространство имен, содержащее тег с именем «mytag», а кто-то другой создаст другое пространство имен с тем же тегом «mytag», и не будет никакого конфликта. Каждый тег «mytag» будет четко дифференцирован.
На практике я обнаружил, что пространства имен XML в значительной степени бесполезны (как часто у вас есть два разработчика, создающих тег для одного и того же XML-файла?) и просто делают синтаксический анализ раздражающе сложным.
В EX4 вам нужно будет получить пространство имен, затем добавить к каждому тегу это пространство имен с префиксом. Так, например, если вы хотите получить доступ к тегу <somenamespace::somename>
, вы напишете:
var somenamespace:Namespace = xml.namespace("somenamespace");
var sometag:XML = somenamespace::somename[0];
Если вы выполните поиск в Google, вы найдете несколько классов AS3, которые удаляют эти бесполезные пространства имен из XML, чтобы упростить синтаксический анализ.
Комментарии:
1. хорошо — теперь это объясняет, почему я не смог получить доступ к данным в своих узлах! Спасибо!
2. Имейте в виду, что у каждого XML-документа есть пространство имен по умолчанию, которое не имеет префикса. Если вы работаете с четко определенной структурой XML, которую можно проверить с помощью XSD-файла, и вы не можете изменить XSD-файл (например, для MathML), единственный способ «расширить» XML — это ввести ваши собственные элементы в отдельное пространство имен, которым вы владеете. (Каждый XSD может определять, где разрешены такие расширения, например, XML-файлы приложений, используемые в AIR SDK, не позволяют этого.)
Ответ №2:
Многие люди указывают на объяснение Джеймса Кларка как на одно из самых ясных: