Парсинг xml файла от 1с с помощью simplexml

Serdes

Новичок
Есть xml
HTML:
<?xml version="1.0" encoding="utf-8"?>
<КоммерческаяИнформация>

<ПакетПредложений ИдентификаторКаталога="687">
<ЗначениеСвойства ИдентификаторКаталога="6337DAA3-C29D-43D6-B94B-F32523ED1F0C" ИдентификаторСвойства="00004" Значение="Розничные"/>

<Предложение Цена="45" НормаУпаковки="1" Единица="шт" Валюта="руб.">
<СсылкаНаТовар ИдентификаторКаталога="1234" ИдентификаторВКаталоге="00007218"/>
<ЗначениеСвойства ИдентификаторКаталога="124" ИдентификаторСвойства="ПолноеНаименование" Значение="CD-RW диск Verbatim Slim Case 1 шт (700МВ, 8х-12х)"/>
</Предложение>

<Предложение Цена="10" НормаУпаковки="1" Единица="шт" Валюта="руб.">
<СсылкаНаТовар ИдентификаторКаталога="001" ИдентификаторВКаталоге="00001653"/>
<ЗначениеСвойства ИдентификаторКаталога="001" ИдентификаторСвойства="ПолноеНаименование" Значение="АЗУ Alcatel OTE DB/300/500/700"/>
</Предложение>

</ПакетПредложений>

</КоммерческаяИнформация>
Хочу с помощью simplexml присвоить переменным определённые атрибуты.

PHP:
<?  
$importFile = 'demo.xml';
$xml = simplexml_load_file($importFile);
$data = array();
//А дальше бум бум 
?>
 

Ярослав

Новичок
PHP:
<?  
$importFile = 'demo.xml';
$xml = simplexml_load_file($importFile);
$data = array();
//А дальше бум бум 
?>
Это почему? Что непонятно?

PHP:
var_dump($xml->ПакетПредложений['ИдентификаторКаталога']);
$xml->ПакетПредложений['ИдентификаторКаталога'] = 5;
var_dump($xml->ПакетПредложений['ИдентификаторКаталога']);

/*php 1.php
object(SimpleXMLElement)#4 (1) {
  [0]=>
  string(3) "687"
}
object(SimpleXMLElement)#5 (1) {
  [0]=>
  string(1) "5"
}
*/
 

fixxxer

К.О.
Партнер клуба
Только что понял, что правы те, кто говорит, что кириллица, все же, менее читабельна, чем латиница: CamelCase выглядит ужасно, глаза в кучку.
 

Serdes

Новичок
А в цикле как обработать, + к нему надо мне в базу mySQl всё это вбить
 

Serdes

Новичок
PHP:
foreach(.*тут находит что надо*..) {
    mysql_query('INSERT INTO ..*ну а тут я записываю*. SET ...');
}
Правильно я понял?

В целом будт выглядить так
PHP:
<?  
// Configuration
require_once('../admin/config.php');

// Database
$db = new DB(DB_DRIVER, DB_HOSTNAME, DB_USERNAME, DB_PASSWORD, DB_DATABASE);
$registry->set('db', $db);


		$importFile = 'demo.xml';
		$xml = simplexml_load_file($importFile);
		$data = array();
		
		foreach($xml->ПакетПредложений->Предложение as $product)
		{
			mysql_query('INSERT INTO    SET   ');
			echo $product['Количество'];
			echo $product->СсылкаНаТовар['ИдентификаторВКаталоге'];
			echo $product->ЗначениеСвойства['Значение'];
			echo $product['Цена'];
		}
?>
}
 

alekciy

Новичок
Только что понял, что правы те, кто говорит, что кириллица, все же, менее читабельна, чем латиница: CamelCase выглядит ужасно, глаза в кучку.
А разве до этой поры не приходилось видеть творения от 1С (к слову, которые умудрились прощелкать свой офсайт описания формата commerceml.ru)? А ужасен тут не вид, а то, что при кирилице в голове получается плохое разделение кода и данных, при латинице такое разделение происходит более явно. Часто думаю о том, что как забугорным латиноазбучным программерам не повезло-то, - они ведь по сути пишут в духе одинэса всю жизнь :D
 

Serdes

Новичок
PHP:
<?  
	$db = mysql_connect('localhost','root','');
	mysql_select_db('oc',$db);
		$importFile = 'demo.xml';
		$xml = simplexml_load_file($importFile);
		$data = array();
		
		foreach($xml->ПакетПредложений->Предложение as $product)
		{
			mysql_query('INSERT INTO product (quantity,product_id,model,price) VALUES $product['Количество'],$product->СсылкаНаТовар['ИдентификаторВКаталоге'],$product->ЗначениеСвойства['Значение'],$product['Цена']');
		}
?>
Выскакивает ошибка Parse error: syntax error, unexpected T_STRING in C:\home\test1.ru\www\insert.php on line 10
 

alekciy

Новичок
Кавычки кто экранировать будет? Не $product['Количество'] а $product[\'Количество\'] и так для всех. Двойне глупо выглядит $product потому как внутри одинарных кавычек переменные не парсятся.

Рекомендую начать с чтения документации: Одинарные кавычки.
 

Serdes

Новичок
Двойне глупо выглядит $product потому как внутри одинарных кавычек переменные не парсятся.

Кхм Кхм не понял вас, это что получается после экранирования у меня всё равно ничего не будет работать?
 

Вурдалак

Продвинутый новичок
PHP:
"INSERT INTO product (quantity,product_id,model,price) VALUES {$product['Количество']} ...."
P.S. Проверь SQL тоже. После VALUES ..., по-моему, список значений в скобках должен быть, как и список полей.
 

alekciy

Новичок
Кхм Кхм не понял вас, это что получается после экранирования у меня всё равно ничего не будет работать?
Если строку оставить внутри одинарных кавычек, то да, не будет. Потому что внутри этой строки $product это не переменная (в данном случае массив), просто символы.
 

Serdes

Новичок
PHP:
<?  
	$db = mysql_connect('localhost','root','');
	mysql_select_db('oc',$db);
		$importFile = 'demo.xml';
		$xml = simplexml_load_file($importFile);
		$data = array();
		
		foreach($xml->ПакетПредложений->Предложение as $product)
		{
		mysql_query ('INSERT INTO product (quantity,product_id,model,price) VALUES $product[\'Количество\'],$product->СсылкаНаТовар[\'ИдентификаторВКаталоге\'],$product->ЗначениеСвойства[\'Значение\'],$product[\'Цена\']');
		}
?>
В базу ничего не записался ((((( В чем проблема может быть??
 

alekciy

Новичок
facepalm.jpg
PHP:
mysql_query('
	INSERT INTO
		product (
			  quantity
			, product_id
			, model
			, price
		)
	VALUES (
		  ' . $product['Количество'] . '
		, ' . $product->СсылкаНаТовар['ИдентификаторВКаталоге'] . '
		, ' . $product->ЗначениеСвойства['Значение'] . '
		, ' . $product['Цена'] . '
	)
');
 

Serdes

Новичок
PHP:
<?  
	$db = mysql_connect('localhost','root','');
	mysql_select_db('oc',$db);
		$importFile = 'demo.xml';
		$xml = simplexml_load_file($importFile);
		$data = array();
		
		foreach($xml->ПакетПредложений->Предложение as $product)
		{
		$result = mysql_query('
			INSERT INTO
				product (
					  quantity
					, product_id
					, model
					, price
				)
			VALUES (
				  ' . $product['Количество'] . '
				, ' . $product->СсылкаНаТовар['ИдентификаторВКаталоге'] . '
				, ' . $product->ЗначениеСвойства['Значение'] . '
				, ' . $product['Цена'] . '
			)
		');
		if ($result == 'true')
		{echo 'Информация добавлена успешно';}
		else
		{echo 'Erorrrrrr!!!!!!!!!!!!! SUKAAAAAAAAAAAAAAAAAA';}
		}
?>
Не добавляет, в чём ещё может быть ошибка?
 

fixxxer

К.О.
Партнер клуба
А ужасен тут не вид, а то, что при кирилице в голове получается плохое разделение кода и данных, при латинице такое разделение происходит более явно. Часто думаю о том, что как забугорным латиноазбучным программерам не повезло-то, - они ведь по сути пишут в духе одинэса всю жизнь :D
Да нифига. В последние лет 6 95% данных у меня тоже на английском, не в этом дело.
 

alekciy

Новичок
Да нифига. В последние лет 6 95% данных у меня тоже на английском, не в этом дело.
Хм... может просто потому что ты не носитель языка? Других объяснений не возникает. Просто мне всегда было латинщиков жалко, мне казалось, что им неудобно из-за смешивания кода и данных. Но по ходу выходит, что это видимо работает только у нас и только в контексте 1с.
 

Serdes

Новичок
PHP:
<?  
	$db = mysql_connect('localhost','root','');
	mysql_select_db('oc',$db);
		$importFile = 'demo.xml';
		$xml = simplexml_load_file($importFile);
		$data = array();
		
		foreach($xml->ПакетПредложений->Предложение as $product)
		{
		mysql_query('
			INSERT INTO
				product (
					  quantity
					, product_id
					, model
					, price
				)
			VALUES (
				  ' . $product['Количество'] . '
				, ' . $product->СсылкаНаТовар['ИдентификаторВКаталоге'] . '
				, ' . $product->ЗначениеСвойства['Значение'] . '
				, ' . $product['Цена'] . '
			)
			');
		echo '<p>';
		echo mysql_error();
		}
?>
Вот что выводит
You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '***********' at line 11
 
Сверху