Помогите сформировать цикл в xml

WebGomel
На сайте с 29.10.2011
Offline
78
1463

Приветствую уважаемые форумчане. Помогите мне, безграмотному правильно сформировать xml запрос. А то я мучаюсь, мучаюсь, но что-то у меня ничего не получается :(

Выглядит всё так:

$dataXML = 

"<Bill xmlns=\"http://site.ru/api/\">".
//"<billID />".
"<eripId>000</eripId>".
"<invId>000</invId>".
"<dueDt>000</dueDt>".
"<addedDt>000</addedDt>".
//"<payedDt />".
"<fullName>Nane</fullName>".
"<mobilePhone>000</mobilePhone>".
"<notifyByMobilePhone>false</notifyByMobilePhone>".
//"<email />".
"<notifyByEMail>false</notifyByEMail>".
"<fullAddress>Adres</fullAddress>".
"<amt>000</amt>".
"<curr>CURR</curr>".
"<statusEnum>NotSet</statusEnum>".
//"<info />".
"<products>".
"<ProductInfo>".
"<invItemId></invItemId>".
"<desc>$description</desc>".
"<count>1</count>".
"<amt>000</amt>".
"</ProductInfo>".
"</products>".
"</Bill>";

Вот это:

"<ProductInfo>". 

"<invItemId></invItemId>".
"<desc>$description</desc>".
"<count>1</count>".
"<amt>000</amt>".
"</ProductInfo>".

мне нужно вывести циклом столько раз, сколько существует $description.

Как это правильно сделать? Благодарю за ответы :)

Удалённый системный администратор ( https://remadmin.com )
L
На сайте с 07.12.2007
Offline
351
#1
WebGomel:
Вот это:
"<ProductInfo>". 
"<invItemId></invItemId>".
"<desc>$description</desc>".
"<count>1</count>".
"<amt>000</amt>".
"</ProductInfo>".

мне нужно вывести циклом столько раз, сколько существует $description.

Так цикл, таки, надо организовать на php? Если $description - это массив, то некрасиво сделать можно так:

"<ProductInfo>". 
"<invItemId></invItemId>".
"<desc>"
.implode('</desc><count>1</count><amt>000</amt></ProductInfo><ProductInfo><invItemId></invItemId><desc>', $description)
."</desc>".
"<count>1</count>".
"<amt>000</amt>".
"</ProductInfo>".
Но грамотнее - делать отдельный цикл, тк для разных $description должны быть разные $invItemId, $count и $amt.

Тут всё завивит от организации данных. Если имеете синхронные массивы $description, $invItemId, $count и $amt (например, выгребаете из БД), то что-нибудь типа такого:

$tmp = '';
$res = mysql_query("SELECT invItemId, description, count, amt FROM ИмяТаблицы WHERE УсловиеВыборки", $conn_id);
while ($row = mysql_fetch_array($res, MYSQL_ASSOC))
$tmp .= "<ProductInfo>"
."<invItemId>".$res['invItemId']."</invItemId>"
."<desc>".$res['description']."</desc>"
."<count>".$res['count']."</count>"
."<amt>".$res['amt']."</amt>"
."</ProductInfo>";

и потом вставляете $tmp в нужное место:

..."<products>".$tmp."</products>"...

WebGomel
На сайте с 29.10.2011
Offline
78
#2

Огромное спасибо!

Всё получилось. 🍻

Сделал правда по некрасивому варианту, так как там обязательные параметры только $description и count, который всегда равен единице, а amt - необязательный и его мне вообще не нужно передавать.

А $description - это да, массив, он перед этим из другого xml формируется.

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий