Взаимодействие XML и MySql. xsql?

dub

Новичок
Взаимодействие XML и MySql. xsql?

Добрый день, вечер утро:)
Проблема состоит вот в чем:
есть большое количество таблиц.(несколько десятков тысяч строк в среднем.) необходимо по SQL запросу формировать вывод, а потом этот вывод представлять в виде XML. А може быть и не в этом порядке. Вся загвозка тут в том, что данные хранятся в столбцах с именами, к примеру "Imya_stolbca1","Imya_stolbca2", значения которых: ("Imya_stolbca1"=>"клиент1","клиент2")
("Imya_stolbca2"=>"адрес1","адрес2"). Вывод должен быть в виде
<client>
<name>"клиент1"</name>
<addres>"адрес1"</addres>
</client>
<client>
<name>"клиент1"</name>
<addres>"адрес1"</addres>
</client>
то биш как видно Imya_stolbca1 != name , а Imya_stolbca2 != addres
делать таблицу(файл) соответствий? А если полей очень много как и таблиц? создавать класс для обработки ? Или может есть какой-то аналог xsql, или чего то подобного для решения этой ситуации?
Буду очень благодарен любым идеям, мыслям, ссылкам, советам на этот щет..
 

alexhemp

Новичок
Делай для каждой таблицы SELECT field1 AS address, field2 AS name ...

потом в цикле выводи нужный XML типа

foreach ($row = $mysql_fetch_assioc($res)) {
echo "<client>";
foreach ($row as $key=>$value) {
echo "<".$key.">".$value."</".$key.">";
}
echo "</client>";
}

Чего уж проще-то...

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

atv

Новичок
http://pear.php.net/package/XML_sql2xml - я сам с ним не работал, так что ничего сказать не могу, попробуй, может подойдёт.
 

dub

Новичок
да класец очень даже прикольный . я думаю он мне пригодится. спасиба. atv
да, поскольку я больше пока ничего не нашол буду использовать структуру предложенуюalexhemp, благодарю.
Но правда буду использовать что то вроде :
PHP:
function convertMySqltoXML($host,$user,$password,$db,$table)
	{		
		$link = mysql_connect($host, $user, $password) 
			or die("Could not connect: ".mysql_error());
		$charset = mysql_client_encoding($link);
		mysql_select_db($db)  
			or die("Could not select database: ".mysql_error());
		$sqlQuerry = mysql_query('select * from '.$table.' limit 30');
		$vertSize = mysql_num_rows($sqlQuerry); 
		$horSize  = mysql_num_fields($sqlQuerry);
		$charset = mysql_client_encoding($link);
		//создаем XML;
		$writer = new XMLWriter();
		$writer->openUri('xml.xml');
		$writer->startDocument('1.0', 'UTF-8');
		$writer->startElement($table);
		for ($i=0;$i<$vertSize;$i++)
		{
			$writer->startElement('line'.$i);
			for ($j=0;$j<$horSize;$j++)
			{	
				$rezult = mysql_result($sqlQuerry,$i,$j);	
				$nodeName = mysql_field_name($sqlQuerry,$j);
				$writer->startElement($nodeName);
				if ($rezult)
				{
					$rezult = iconv($charset, "UTF-8", $rezult);
					$writer->text($rezult);
				}								
				$writer->endElement($nodeName);
			}
			$writer->endElement('line'.$i);
		}
		$writer->endElement($table);
		$writer->endDocument();
	}
XMLWriter работает очень быстро, правда небольшие глюки с русской кодировкой. вот и приходится выкручиватся. Добавлю таки сюда таблицу соответсвий и все :). Более рационального выхода я не вижу пока:)
 

slach

Новичок
dub
ВОТ ЭТО МЕДЛЕННО
$rezult = mysql_result($sqlQuerry,$i,$j);

вынеси за пределы цикла и собирай отдельным циклом в массив...
$nodeName = mysql_field_name($sqlQuerry,$j);

ну и коннект вообще вынеси нафик... оформи все отдельным классом с тремя методами
Connect
Execute
и
SQL2XMLWriter

кстати интересно насколько просто XMLWriter конвертируется в DOMDocument ? ;)
 

dub

Новичок
спасибо slach! В так и сделаю. А на счет XMLWriter , если чесно, то я даже не знаю . мне главное создать XML нужного мне стандартного вида из данных взятых из нескольких таблиц. причем таблиц много, полей еще больше все называется как угодно, а XML должен быть стандартизированого вида. Дальше я хочу использовать DOM и XMLReader но работать они уже будут с файлами XML.
 
Сверху