у меня есть 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, то оно запустится.
Помогите мне, пожалуйста….
Ты можешь использовать 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"));
}
}
}
?>
Для этого есть куча библиотек PHP, Google может быть хорошим местом для начала !:
Массив PHP в XML
Вы можете использовать SimpleXML:
здесь объяснил: Как преобразовать массив в SimpleXML
документы: http://php.net/manual/en/book.simplexml.php
Основной способ конвертации:
<?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
Вот код 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"));
}
}
}
?>