GRIG
Новичок
Подфорум про XML-технологии какой-то дохлый. Поэтому спрошу здесь.
Написал я вот такой тестовый скриптик:
Почему обломался вариант 1? По идее, тег Query в исходном документе хоть и снабжен указанием на пространство имен, но это то же самое пространство, которое в этом месте документа принимается по умолчанию. Т.е. (по идее) влиять не должно.
Написал я вот такой тестовый скриптик:
PHP:
// Тестовый XML-документ в виде строки
$xml = '<S:Envelope xmlns:S="http://schemas.xmlsoap.org/soap/envelope/">'
. '<S:Body>'
. '<ns3:GetMessagesRs xmlns:ns3="http://www.some.my.host/my/path">'
. '<messages>'
. '<message>'
. '<ns3:Query>'
. '<InternalKey>11111</InternalKey>'
. '</ns3:Query>'
.'</message>'
. '</messages>'
. '</ns3:GetMessagesRs>'
. '</S:Body>'
. '</S:Envelope>';
// Преобразуем эту строку в структуры DOM
$xml_doc = new DOMDocument();
$xml_doc->preserveWhiteSpace = false;
$xml_doc->loadXML( $xml );
$root = $xml_doc->documentElement;
// Готовим поиск по созданному документу
$xpath = new DOMXPath( $xml_doc );
$xpath->registerNamespace( "S", "http://schemas.xmlsoap.org/soap/envelope/" );
$xpath->registerNamespace( "ns", "http://www.some.my.host/my/path" );
// Ищем первое, что нужно
$answer = $xpath->query( "/S:Envelope/S:Body/ns:GetMessagesRs[1]" ); // - находит нормально
$answer = $answer->Item( 0 );
// Ищем дальше вглубь
$message = $xpath->query( "messages/message", $answer ); // находит нормально
$message = $message->Item( 0 );
// Еще дальше вглубь - вариант 1
$query1 = $xpath->query( "Query", $message ); // облом - ничего не найдено
// вариант 2
$query2 = $xpath->query( "ns:Query", $message ); // вот теперь найдено