Надо разобрать XML файл и поместить в БД

Leonid

PHP? нет, не слышал...
Надо разобрать XML файл и поместить в БД

Есть XML файл со списком товаров, разденленных на категории

<catalogue>
<name>Название каталога</name>
<group>
<name>Категория 1</name>
<descr></descr>
<item price="653.76" balance="707">
<id>3108</id>
<name>Товар 1</name>
</item>
<item price="536.54" balance="197">
<id>1202</id>
<name>Товар 2name>
</item>
</group>
<group>
<name>Категория 2</name>
<descr></descr>
<item price="65323.76" balance="7">
<id>1111</id>
<name>Товар 3</name>
</item>
<item price="53336.54" balance="1" >
<id>2222</id>
<name>Товар 4</name>
</item>
</group>
</catalogue>

Надо категории экспортировать в таблицу categories (id, title) а товары в таблицу goods (id, category_id, title, price)
 

Farsh

~ on ~ high ~ wave ~
[offtop]
Сейчас тебе предложат с таким топиком пойти в раздел 'работа', а также дадут ссылки на средства обработки xml ...
[/offtop]

http://ru2.php.net/manual/en/simplexml.examples-basic.php

в чем проблема? Бежишь по <group>, получаешь характеристики категорий, загоняешь в базу, получаешь сгенерированный ID, бежишь по товарам ...
 

Leonid

PHP? нет, не слышал...
Te я тут кое-что накопал, вроде работает (без занесения в БД пока)

PHP:
$reader = new XMLReader();

$reader->XML($xml_text);


$id = '';
$name = '';
$price = '';

while ($reader->read()) {
  
  if ($reader->name == 'group' && $reader->nodeType == XMLReader::ELEMENT)
		{
		$reader->read();
		$reader->read();
		$reader->read();
    	echo '<h2>'.$reader->value.'</h2>';
		}
	
  if ($reader->name == "item" && $reader->nodeType == XMLReader::ELEMENT) {
  	$price = $reader->getAttribute('price');
	}
  
   if ($reader->name == "id" && $reader->nodeType == XMLReader::ELEMENT) {
    $reader->read();
    $id = $reader->value;
	}
	
   if ($reader->name == "name" && $reader->nodeType == XMLReader::ELEMENT) {
    $reader->read();
	$name = $reader->value;
   
   }
   
   if ($id and $name)
   	{
	 echo $id .' '.$name.' '.$price.'<br />';
	}
    
  }

$reader->close();
 

Leonid

PHP? нет, не слышал...
ну это почти - что построчное чтение текстового файла. Хочется из хмл делать выборку, типа как из БД. Буду изучать.
 

Фанат

oncle terrible
Команда форума
гы гы.
а ты как хотел? текстовый файл и есть.

-~{}~ 12.05.09 15:53:

не очень понятно, что имеется в виду под словами "как из бд". вызывает, я бы сказал, большие сомнения такая формулировка.
 

Фанат

oncle terrible
Команда форума
ну, толкования может быть два. "как из бд чисто внешне" или "используя внутренние механизмы, аналогичные используемым в той или иной СУБД".
что-то мне подсказывает, что вариант имелся совсем не второй.
 
Сверху