Chieftec
@Chieftec
Родился и вырос

Парсинг XML от ISPManager API

Добрый день!
Встала необходимость парсить xml который возвращается от ispamanger api,
Собственно конкретика: я запрашиваю список юзеров, у всех есть набор параметров, обрамленных парными тегами, но есть параметр <disabled /> который одиночный и имеется у тех юзеров, кто отключен.
Никак не могу распарсить именно его. Код, который находит эти теги есть, но что делать дальше, ведь у данного тега нет парного и нет значения (того, что внутри ноды), как тогда определять disabled юзер или нет?

Стандартная конструкция поиска параметра у меня сделана так:
	if( $doc = domxml_open_mem( $result ) ){
		$root = $doc->document_element();
		$ar = array();
$name_array = $root->get_elements_by_tagname('name');
		$i = 0;
		foreach ($name_array as $name) 
		{
			$ar[$i]['name'] .= $name->get_content();
			$i++;
		}


Что делать с этим одиночным тегом?
  • Вопрос задан
  • 3688 просмотров
Решения вопроса 1
@PomanoB
Если вкратце, вам надо искать теги не name, а elem, и дальше двигаться уже от них.

<?php
header('Content-type: text/plain;');
$xml = '
<doc>
	<elem>
		<name>belykrolik</name>
		<owner color="blue">golov</owner>
		<disk used="124" limit="1024"/>
		<bandwidth used="24" limit="100000000"/>
		<disabled/>
		<preset>test</preset>
		<note>01/02/2014</note>
	</elem>

	<elem>
		<name>belykrolik2</name>
		<owner color="blue">golov</owner>
		<disk used="124" limit="1024"/>
		<bandwidth used="24" limit="100000000"/>
		<preset>test</preset>
		<note>01/02/2014</note>
	</elem>
</doc>';

$ar = array();
$i = 0;
$x = simplexml_load_string($xml);
foreach($x->elem as $elem)
{
	$ar[$i]['name'] = (string)$elem->name;
	$ar[$i]['disabled'] = (bool)$elem->disabled;
	
	$i++;
}
var_dump($ar);

Результат:
array(2) {
  [0]=>
  array(2) {
    ["name"]=>
    string(10) "belykrolik"
    ["disabled"]=>
    bool(true)
  }
  [1]=>
  array(2) {
    ["name"]=>
    string(11) "belykrolik2"
    ["disabled"]=>
    bool(false)
  }
}
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
@WEBIVAN
Зачем вообще получать и парсить XML?
Добавьте параметр out=json и декодируйте через json_decode, получится быстрее и менее ресурсоемко.
Ответ написан
Комментировать
Ваш ответ на вопрос

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

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