Рассмотрим следующее XML:
<?xml version="1.0" encoding="utf-8"?>
<movies xmlns:en="http://english-language.com/">
<en:movie>
<title>The Godfather</title>
</en:movie>
<en:movie>
<title>Saving Private Ryan</title>
</en:movie>
<something-something xmlns:en="http://english.com/">
<en:movie>
<title>The Fellowship of the Ring</title>
</en:movie>
</something-something>
</movies>
Этот код ниже будет соответствовать Крестный отец и Сохранение рядового Райана . Но почему? Я ожидал, что это не удастся. Похоже, что запрос игнорирует имя пространства имен (URI) в пользу префикса пространства имен
$xpath = new DOMXpath($dom);
$xpath->registerNamespace('en', 'http://complete-nonsense');
$elements = $xpath->query("//en:movie");
Я ожидал, что приведенный ниже код будет соответствовать Братство Кольца , но опять-таки оно соответствует Крестный отец и Спасение рядового Райана .
$xpath = new DOMXpath($dom);
$xpath->registerNamespace('en', 'http://english.com/');
$elements = $xpath->query("//en:movie");
Только теперь URI, кажется, имеет какое-то значение, теперь он соответствует Братству Кольцо .
$xpath = new DOMXpath($dom);
$xpath->registerNamespace('english', 'http://english.com/');
$elements = $xpath->query("//english:movie");
Почему это так? Что-то не так с реализацией PHP или как?