Как преобразовать массив в XML с условием переполнения стека

у меня есть PHP-код, как это:

public function get_xml_product($serviceName) {
$product    = Array();
$idx        = $idx2 = 0;
$explodeResult=explode(", ",$serviceName);
foreach($explodeResult as $value)
{
$sql = "SELECT id,parent,code,name,xs1 as DOWNLOAD, xs2 as UPLOAD
FROM sc_params
WHERE rfen = 'SERVICE_REQUESTED'
AND code = '".$value."'
OR code IN
(
SELECT code
FROM sc_params
WHERE rfen = 'SERVICE_REQUESTED'
AND id = (
SELECT parent
FROM sc_params
WHERE rfen = 'SERVICE_REQUESTED'
AND code = '".$value."' )
)
";
$stmt = oci_parse($this->_conn,$sql);
$rs = oci_execute($stmt);
if (!$rs) {
$error = oci_error();
$this->_err = $error;
return false;
}

while ($data = oci_fetch_array($stmt, OCI_BOTH)) {
if($data['PARENT'] == 0) {
$idx++;
$product[$idx]['id']        = $data['ID'];
$product[$idx]['name']      = $data['NAME'];
}
else {
foreach($product as $product2)
{
$product[$idx]['download'][$idx2]['name']   = 'DOWNLOAD';
$product[$idx]['download'][$idx2]['value'] = $data['DOWNLOAD'];
$product[$idx]['upload'][$idx2]['name']   = 'UPLOAD';
$product[$idx]['upload'][$idx2]['value'] = $data['UPLOAD'];
$idx2++;
}
}
}
}
print_r($product);
......

результат шоу:

 Array
(
[1] => Array
(
[id] => 1
[name] => INTERNET
[download] => Array
(
[0] => Array
(
[name] => DOWNLOAD
[value] => 1024
)

)

[upload] => Array
(
[0] => Array
(
[name] => UPLOAD
[value] => 256
)

)

)

и я хочу сделать это в XML, как этот:

<xml version="1.0"?>
<services>
<service>
<id>1</id>
<name>INTERNET</name>
<attribute>
<name>DOWNLOAD</name>
<value>1024</value>
</attribute>
<attribute>
<name>UPLOAD</name>
<value>512</value>
</attribute>
</service>
</services>

ОБНОВЛЕНО:
мой PHP-файл имеет условие для формата XML … я попытался:

$xml = new SimpleXMLElement("<services/>");
foreach($product as $key => $value) {
if (is_array($value)) {
$subnode = $xml->addChild("service");
$this->array_to_xml($value, $subnode);
}
else
{
$xml->addChild(htmlspecialchars("$key"),htmlspecialchars("$value"));
}
}
$string = $xml->asXML();
$result = htmlentities($string);

и это называется array_to_xml, вот оно:

public function array_to_xml($product, &$xml) {
foreach($product as $key => $value) {
if (is_array($value)) {
$subnode = $xml->addChild("service");
array_to_xml($value, $subnode);
} else {
$xml->addChild(htmlspecialchars("$key"),htmlspecialchars("$value"));
}
}
return $xml;
}

это дало ошибку 500 Internal Server Error, но если я уберу условие в php, то оно запустится.

Помогите мне, пожалуйста….

0

Решение

Ты можешь использовать SimpleXML: получить больше помощи от Вот с надлежащим обсуждением в comments,
попробуйте этот. Это должно решить вашу проблему:

<?php

$test_array=Array
(
'1' => Array
(
'id' => 1,
'name' => 'INTERNET',
'download' => Array
(
'0' => Array
(
'name' => 'DOWNLOAD',
'value' => 1024
)

),

'upload' => Array
(
'0' => Array
(
'name' => 'UPLOAD',
'value' => 256
)

)

)
);
// creating object of SimpleXMLElement
$xml = new SimpleXMLElement("<?xml version=\"1.0\"?><services></services>");
$subnode=$xml->addChild("service");
array_to_xml($test_array[1],$subnode);

//saving generated xml file
print $xml->asXML('info.xml');// create an info.xml file is written successfully will print 1.

function array_to_xml($test_array, &$xml) {
foreach($test_array as $key => $value) {
if(is_array($value)) {
if(!is_numeric($key)){
$subnode = $xml->addChild("$key");
array_to_xml($value, $subnode);
}
else{
$subnode = $xml->addChild("attribute");
array_to_xml($value, $subnode);
}
}
else {
$xml->addChild("$key",htmlspecialchars("$value"));
}
}
}

?>
1

Другие решения

Для этого есть куча библиотек PHP, Google может быть хорошим местом для начала !:
Массив PHP в XML

1

Вы можете использовать SimpleXML:
здесь объяснил: Как преобразовать массив в SimpleXML

документы: http://php.net/manual/en/book.simplexml.php

1

Основной способ конвертации:

    <?php

$ test_array = array (‘tmp1’ => ‘tmp2’, ‘tmp3’ => ‘tmp4’, ‘more_array’ => array (‘tmps’ => ‘tmpx’,),);
$ xml = new SimpleXMLElement (»); array_walk_recursive ($ test_array, array ($ xml, ‘addChild’)); print $ xml-> asXML ();

результат:

tmp1tmp3tmpx> ТМПС / ​​корень>

Ключи & значения меняются местами — это можно исправить с помощью array_flip () перед array_walk.

A_W_recursive требует PHP5, вы можете использовать a_w, но ‘tmps’ => ‘tmpx’ не сработает.

Другой способ (повторяемый, на основе) можно увидеть здесь:
https://www.kerstner.at/en/2011/12/php-array-to-xml-conversion/

Извините за кодирование, функция кода на этом сайте не может кодировать тег XML.
Смотрите изображение:
https://imgur.com/X45Q88j

0

Вот код PHP 5.2, который преобразует массив любой глубины в документ XML:

    Array
(
['total_stud']=> 500
[0] => Array
(
[student] => Array
(
[id] => 1
[name] => abc
[address] => Array
(
[city]=>Lahore
[zip]=>54000
)
)
)
[1] => Array
(
[student] => Array
(
[id] => 2
[name] => xyz
[address] => Array
(
[city]=>Karachi
[zip]=>56000
)
)

)
)

Сгенерированный XML будет выглядеть так:

<?xml version="1.0"?>
<student_info>
<total_stud>500</total_stud>
<student>
<id>1</id>
<name>abc</name>
<address>
<city>Lahore</city>
<zip>54000</zip>
</address>
</student>
<student>
<id>1</id>
<name>abc</name>
<address>
<city>Karachi</city>
<zip>56000</zip>
</address>
</student>
</student_info>

Вот код сниппет

// creating object of SimpleXMLElement
$xml_student_info = new SimpleXMLElement("<?xml version=\"1.0\"?><student_info></student_info>");

// function call to convert array to xml
array_to_xml($student_info,$xml_student_info);

//saving generated xml file
$xml_student_info->asXML('file path and name');// function defination to convert array to xml
function array_to_xml($student_info, &$xml_student_info) {
foreach($student_info as $key => $value) {
if(is_array($value)) {
if(!is_numeric($key)){
$subnode = $xml_student_info->addChild("$key");
array_to_xml($value, $subnode);
}
else{
$subnode = $xml_student_info->addChild("item$key");
array_to_xml($value, $subnode);
}
}
else {
$xml_student_info->addChild("$key",htmlspecialchars("$value"));
}
}
}

?>
0
По вопросам рекламы ammmcru@yandex.ru
Adblock
detector