В элементе документа определено пространство имен xml (атрибут xmlns="http://www.movielabs.com/ACNS"
).Пространство имен - это URL http://www.movielabs.com/ACNS
.Это должно иметь глобально уникальную строку (URN).Из-за этого URL-адреса используются часто.Вероятность того, что кто-то использует ваш домен для пространства имен, очень мала, и вы можете разместить некоторую документацию по URL.
Анализатор XML разрешает пространства имен.Узел получает 4 свойства.
Для <Infringement xmlns="http://www.movielabs.com/ACNS"/>
:
$namespaceURI => http://www.movielabs.com/ACNS
$localName => Infringement
$prefix =>
$nodeName => Infringement
Для <movie:Infringement xmlns:movie="http://www.movielabs.com/ACNS"/>
:
$namespaceURI => http://www.movielabs.com/ACNS
$localName => Infringement
$prefix => movie
$nodeName => movie:Infringement
$namespaceURI
и $localName
стабильны.Два других зависят от префикса.Префикс является псевдонимом для пространства имен.Пространство имен uri длинное и сложное, что делает XML более трудным для чтения и записи при использовании для каждого элемента / атрибута.Но вы можете интерпретировать узлы элемента следующим образом:
{http://www.movielabs.com/ACNS}:Infringement
Таким образом, пространство имен - это единственное, что определяет, что означают узлы, а не префикс / псевдоним.Префиксы могут быть переопределены для подэлемента.
<foo xmlns="urn:foo"><bar xmlns="urn:bar"/></foo>
Xpath использует ту же концепцию с собственным распознавателем.Вы регистрируете свои собственные префиксы для пространства имен.Таким образом, не имеет значения, как префиксы используются в XML, должно совпадать только пространство имен URI.
В DOM вы делаете это на экземпляре DOMXPath:
$dom = new DOMDocument();
$dom->loadXml($xml);
$xpath = new DOMXpath($dom);
$xpath->registerNamespace('movie', 'http://www.movielabs.com/ACNS');
var_dump(
$xpath->evaluate('string(/movie:Infringement/movie:Case/movie:ID)')
);
В SimpleXML, вы можете зарегистрировать пространство имен в SimpleXMLElement.
$element = simplexml_load_string($xml);
$element->registerXpathNamespace('movie', 'http://www.movielabs.com/ACNS');
var_dump(
(string)$element->xpath('/movie:Infringement/movie:Case/movie:ID')[0]
);
СОВЕТ: Пространство имен по умолчанию используется только для элементов, атрибуты находятся в «пространстве имен no / empty», если у них нет префикса.