Разбор xml файла

stanlee

Новичок
Разбор xml файла

Падскажите пажалуйста в чем ошибка
сказу скажу что я с xml мало работал

---- xml -----
...
PHP:
<main>
	<tours>
		<tour currency="...">
			<date date="...">
				<hotel id="...">
				</hotel>
			</date>
		</tour>
	<tours>
</main>
...
---- /xml -----

пытаюсь вынуть из него инфу таким кодом

PHP:
if ($node->tagname=='TOURS') {
		$tours_info = array();
		$tours_info = $node->child_nodes();

		for ($i = 0; $i < sizeof($tours_info); $i++) { 
			if ($tours_info[$i]->tagname == 'TOUR') {
				$tour_arr[$i]["tour"]["currency"]		= $tours_info[$i]->get_attribute('CURRENCY');

				if ($tours_info[$i]->type == XML_ELEMENT_NODE) {
					$date_info = array();
					$date_info = $tours_info[$i]->child_nodes();

					for ($y = 0; $y < sizeof($date_info); $y++) {
						if ($date_info[$y]->tagname == 'DATE') {
							$date_arr[$y] = $date_info[$y]->get_attribute('date');
						}

						if ($date_info[$y]->type == XML_ELEMENT_NODE) {
							$hotel_in_date_info = array();
							$hotel_in_date_info = $date_arr[$y]->child_nodes();
						}
					}

					$tour_arr[$i]["date"] = $date_arr;
				}
			}
		}
	}
}
до даты дохажу а вот отель зацепить никак не могу :(
в че я ошибся то?
 

ivankrkrkr

Новичок
Ну во-первых стоит отказать от использования функций DOM XML (http://www.php.net/manual/en/ref.domxml.php), потому что есть DOM (http://www.php.net/manual/en/ref.dom.php). DOM XML - это в прошлом, и вообще, видимо, недоразумение какое-то.
Во-вторых, в массиве $date_arr у Вас содержатся АТРИБУТЫ 'date', которые по определению не могут содержать дочерних элементов. Элемент 'hotel' содержится в ЭЛЕМЕНТЕ 'date', отсюда и путанница.
if ($date_info[$y]->tagname == 'DATE') {
$date_arr[$y] = $date_info[$y]->get_attribute('date');
$date_elements[] = $date_info[$y]; // Что то типа такого надо добавить
}

НО: Настоятельно рекомендую выбросить этот код нафиг и написать согласно DOM!!!
 

stanlee

Новичок
чета не выходит
вот то что в массиве $date_info у меня


[0] => domtext Object
(
[type] => 3
[name] => #text
[content] =>

[0] => 298
[1] => 125313784
)

[1] => domelement Object
(
[type] => 1
[tagname] => DATE
[0] => 299
[1] => 125313880
)

[2] => domtext Object
(
[type] => 3
[name] => #text
[content] =>

[0] => 300
[1] => 125443256
)
....
 

ivankrkrkr

Новичок
Ну вот у тебя есть там штуки такого вида:
[1] => domelement Object
(
[type] => 1
[tagname] => DATE
[0] => 299
[1] => 125313880
)
Это похоже ЭЛЕМЕНТЫ 'date'. Засунь их в отдельный массив и обработай точно так же, как и предыдущие элементы.
Главное не путай из с АТРИБУТАМИ 'date'.

Не устаю повторять что лучше использовать DOM а не DOM XML.
 

alekciy

Новичок
stanlee
А вообще по хорошему приучайся ЭЛЕМЕНТЫ писать с заглавной буквы, а АТРИБУТЫ со строчной. Избежишь путаницы.
 
Сверху