@astler

Как в PHP получить доступ в SimpleXML к ветке, если используется пространство имен?

Есть такой XML

<?xml version="1.0" encoding="UTF-8" ?>
<tns:RequestAndResponse xmlns:tns="com.dtn.aghost.weather.weatherService">
	<request>
		<tns:Credentials>
			<usernamePasswordCombo>
				<username>E0E0E0</username>
				<password>E0E0E0</password>
			</usernamePasswordCombo>
		</tns:Credentials>
	</request>

	<response>
		<tns:AccountToken expires="2015-10-12T15:20:13.000Z">
			<Token>E0E0E0E1E1E1</Token>
			<URLEncodedToken>E0E0E0E1E1E1</URLEncodedToken>
		</tns:AccountToken>
	</response>
</tns:RequestAndResponse>


В PHP загружаю его при помощи simplexml_load_string, и все. Не могу аонять, как работает namespace в SimpleXML. Подскажите пожалуйта, как мне добраться до Token если я загрузил xml так:
$xml = simplexml_load_string($result);

Спасибо!
  • Вопрос задан
  • 232 просмотра
Решения вопроса 1
skobkin
@skobkin
Гентушник, разработчик на PHP и Symfony.
Например, вот так и так.

Что-то типа такого:
<?php

$xmlString = <<<'XML'
<?xml version="1.0" encoding="UTF-8" ?>
<tns:RequestAndResponse xmlns:tns="com.dtn.aghost.weather.weatherService">
  <request>
    <tns:Credentials>
      <usernamePasswordCombo>
        <username>E0E0E0</username>
        <password>E0E0E0</password>
      </usernamePasswordCombo>
    </tns:Credentials>
  </request>

  <response>
    <tns:AccountToken expires="2015-10-12T15:20:13.000Z">
      <Token>E0E0E0E1E1E1</Token>
      <URLEncodedToken>E0E0E0E1E1E1</URLEncodedToken>
    </tns:AccountToken>
  </response>
</tns:RequestAndResponse>
XML;

$xml = new SimpleXMLElement($xmlString);

foreach ($xml->xpath('//tns:Credentials') as $credentials) {
    var_dump($credentials->usernamePasswordCombo->username, $credentials->usernamePasswordCombo->password);
}

foreach ($xml->xpath('//tns:AccountToken') as $token) {
    var_dump($token->Token, $token->URLEncodedToken);
}
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы