бинарные данные

vg2k

Новичок
бинарные данные

Делаю для движка возможность импорта\экспорта данных с сайта на сайта (нечто более удобное для конкретного случая, нежели дампы БД). Для транспортировки юзаю XML.

Возникла одна проблема, не получается экспортировать данные картинок:
Код:
  <item>
    <model>Project</model>
    <columns>
      <id>1</id>
      <title>foo</title>
      <url>[url]www.site.ru[/url]</url>
      <description></description>
      <pics>
        <pic>
          <description></description>
          <data></data>
        </pic>
      </pics>
    </columns>
  </item>
В <data></data> хотел положить картинку (конечно, xml не для графики и вообще бинарных данных). Не пойму как это сделать.

Это возвращает "пустоту" в <data></data>
PHP:
// использую DomDocument
$data = file_get_contents($filename);
$data_node = $dom->createElement('data', $data);
 

Mr_Max

Первый класс. Зимние каникулы ^_^
Команда форума
Не пойму как это сделать.
RSS?
<image>
<url>............</url>
<title></title>
<link>.................</link>
<width>...............</width>
<height>.............</height>
</image>
 

vg2k

Новичок
Mr_Max ты предлагаешь эскпортировать только ссылку на картнку... а при импорте уже на другом сайте и сервере уже запрашивать эти картинки и подгружать в движок ?

Если да, то мне не хотелось бы так делать... удобнее было бы не зависеть от сайта-импортера, после самого процесса экспорта (перевода объекта и всех его данных в xml).

-~{}~ 23.09.07 23:35:


Упс, чего-то я сглупил... про base64_encode забыл. Проблема вроде бы решена.


---------------------------------------------------------------------------------------------------------------------------

Появился другой вопрос, позвольте не создавать мне еще один лишний топик, с просить прямо здесь.
Мое непонимание заключается в сложности и неудобности с моей точки зрения парсинга xml с помощью DomDocument
http://www.php.net/manual/en/ref.dom.php

xml_parse и simplexml вроде бы не особо удобней.

ниже я приведу пример ужасного кода, который у меня получился... (в данном примере конечно можно было бы обойтись рекурсивной функций назначением аля xml2array, но ведь будут ситуации более сложные и каждый раз перегонять в массивне очень НЕ хорошо т.к. модель dom и xpath удобные все же средства, хотя до меня не доходит как ими красиво пользоваться) вопрос зхаключается в том, "как компактнее и удобнее парсить?"

ЗЫ. Прошу не направлять меня на интернет магазины с книжками, ибо для этого я бы не создавал этого вопроса, а посетил бы соседние топики.
А вот электронная мукулатура не повредила бы =)


из этой xml-ки пытаюсь вытаскивать:
PHP:
<objects>
  <item>
    <model>Project</model>
    <columns>
      <id>3</id>
      <title>Project title</title>
      <url>asdbrakadabra.ru</url>
      <description></description>
      <pics_screens>
        <pic>
          <description></description>
          <data>base64_encode data here</data>
        </pic>
        <pic>
          <description></description>
          <data>base64_encode data here</data>
        </pic>
        <pic>
          <description></description>
          <data>base64_encode data here</data>
        </pic>
      </pics_screens>
    </columns>
  </item>
</objects>
получить хочу такой массив:
PHP:
Array
(
    [model] => Project
    [columns] => Array
        (
            [id] => 3
            [title] => Project title
            [url] => asdbrakadabra.ru
            [description] => 
        )

    [pics] => Array
        (
            [0] => Array
                (
                    [description] => 
                    [data] => base64_encode data here
                )

            [1] => Array
                (
                    [description] => 
                    [data] => base64_encode data here
                )

            [2] => Array
                (
                    [description] => 
                    [data] => base64_encode data here
                )

        )

)
для этого я меня получился такой громадный парсер:
PHP:
		$this->dom->load($filename);
		
		$xpath = new DOMXPath($this->dom);
		$items = $xpath->query('//objects/item/');
		foreach ($items as $key => $value)
		{
			$obj = array();
			foreach ($value->childNodes as $key2 => $value2)
			{
				if (isset($value2->tagName))
				{
					switch ($value2->tagName)
					{
						case 'model': $obj['model'] = $value2->textContent; break;
						case 'columns':
							foreach ($value2->childNodes as $key3 => $value3)
							{
								if (!isset($obj['columns']))
									$obj['columns'] = array();
									
								if (!isset($value3->tagName))
									continue;
									
								if (preg_match('~^pics_~si', $value3->tagName))
								{
									
									foreach ($value3->childNodes as $key4 => $value4)
									{
										if (!isset($value4->tagName))
											continue;
										
										$pic = array();
										foreach ($value4->childNodes as $key5 => $value5)
										{
											if (!isset($value5->tagName))
												continue;

											switch ($value5->tagName)
											{
												case 'description': $pic['description'] = $value5->textContent; break;
												case 'data': $pic['data'] = $value5->textContent; break;
											}
										}
										if (count($pic))
											$obj['pics'][] = $pic;
									}
								}
								else
									$obj['columns'][$value3->tagName] = $value3->textContent;
							}
						break;
					}
				}
			}
			print_r($obj);
		}
 

slach

Новичок
попробуйте simplexml
он проще для понимания на вашем текущем уровне
 
Сверху