Поддержка пространств имен в модели DOM
Модель XML DOM полностью построена на пространствах имен. Поддерживаются только XML-документы, где определены пространства имен. По спецификации W3C приложения DOM, реализующие уровень 1, могут не учитывать пространства имен, а возможности уровня 2 модели DOM учитывают пространства имен. Однако в модели XML DOM все функции учитывают пространства имен, независимо о того, соответствует ли метод рекомендации для уровня 1 или уровня 2 модели DOM.
Например, в среде без учета пространств имен вызов setAttribute("A:b", "123")
согласно рекомендации для уровня 1 модели DOM не возвратит атрибут с префиксом A
и локальным именем b
. Вместо этого будет получен атрибут со значением A:b
.
В среде с поддержкой пространств имен вызов метода setAttribute("A:b", "123")
уровня 2 модели DOM возвратит атрибут с префиксом A
и локальным именем b
. Так работает модель DOM в платформе Microsoft .NET Framework.
Поэтому все методы, принимающие параметр имени, также принимают префикс, дополняющий имя. Параметр имени, такой как A:b
в методе setAttribute уровня 1 модели DOM, проходит синтаксический анализ следующим образом.
Если отсутствуют символы двоеточия (:), локальное имя получает значение параметра
name
, а строки для префикса и NamespaceURI будут пустыми.Если обнаружено двоеточие, имя разбивается на две части в зависимости от позиции первого символа двоеточия. Префикс получает значение строки, расположенной перед двоеточием, а локальным именем становится строка, расположенная после двоеточия. Для методов, не принимающих значение NamespaceURI, оно не разрешается и остается пустой строкой. В противном случае NamespaceURI получает значение строки, переданной методу. Если префикс не определен, метод Save и свойства InnerXml и OuterXml завершаются с ошибкой.