PHP Как строка переходит в XML?

Как строка переходит в XML?

Я использую PHP для редактирования

У меня есть строка данных, но я не могу понять, как превратить данные XML:

<?php
$A_array[]="/AutoAccessory-1";
$A_array[]="/AutoAccessory-1/BodyPartExteriorFinish-1";
$A_array[]="/AutoAccessory-1/ProductType-1";
$A_array[]="/AutoAccessory-1/ProductType-1/AutoPart-1";

$A_array[]="/AutoAccessory-1/ProductType-1/AutoPart-1/ModelYear-1";
$A_array[]="/AutoAccessory-1/ProductType-1/AutoPart-1/Voltage-1";
$A_array[]="/AutoAccessory-1/ProductType-1/AutoPart-1/ModelName-1";
$A_array[]="/AutoAccessory-1/ProductType-1/AutoPart-1/ColorSpecification-1";
$A_array[]="/AutoAccessory-1/ProductType-1/AutoPart-1/ColorSpecification-1/Color-1";
$A_array[]="/AutoAccessory-1/ProductType-1/AutoPart-1/ColorSpecification-1/ColorMap-1";
?>

Как мне превратить строку в нее?

<AutoAccessory>
<ProductType>
<AutoPart>
<ModelYear></ModelYear>
<ColorSpecification>
<Color></Color>
<ColorMap></ColorMap>
</ColorSpecification>
</AutoPart>
</ProductType>
</AutoAccessory>

Я не могу думать о методах
Кто может мне помочь или дать мне несколько идей
буду очень благодарна
Спасибо

-2

Решение

В настоящее время я превращаюсь в массив

Array ( [0] => Array ( [0] => AutoAccessory ) [1] => Array ( [0] => AutoAccessory [1] => BodyPartExteriorFinish ) [2] => Array ( [0] => AutoAccessory [1] => ProductType ) [3] => Array ( [0] => AutoAccessory [1] => ProductType [2] => AutoPart ) [4] => Array ( [0] => AutoAccessory [1] => ProductType [2] => AutoPart [3] => ModelYear ) [5] => Array ( [0] => AutoAccessory [1] => ProductType [2] => AutoPart [3] => Voltage ) [6] => Array ( [0] => AutoAccessory [1] => ProductType [2] => AutoPart [3] => ModelName ) [7] => Array ( [0] => AutoAccessory [1] => ProductType [2] => AutoPart [3] => ColorSpecification ) [8] => Array ( [0] => AutoAccessory [1] => ProductType [2] => AutoPart [3] => ColorSpecification [4] => Color ) [9] => Array ( [0] => AutoAccessory [1] => ProductType [2] => AutoPart [3] => ColorSpecification [4] => ColorMap ) )

Но я не знаю, как превратить его в

$res = array(
"AutoAccessory" =>array(
"BodyPartExteriorFinish"=>"",
"ProductType"=>array("AutoPart"=>array("ModelYear"=>2017,
"Voltage"=>"",
"ModelName"=>"",
"ColorSpecification"=>array("Color"=>"RED",
"ColorMap"=>"RED"

)

)
))

);

Если успешно превратился в вышеупомянутый массив
Используйте следующую программу для вывода XML

        class A2Xml {
private $version    = '1.0';
private $encoding   = 'UTF-8';
private $root       = 'ProductData';
private $xml        = null;
function __construct() {
$this->xml = new XmlWriter();
}
function toXml($data, $eIsArray=FALSE) {
if(!$eIsArray) {
$this->xml->openMemory();
$this->xml->startDocument($this->version, $this->encoding);
$this->xml->startElement($this->root);
}
foreach($data as $key => $value){
if(is_array($value)){
$this->xml->startElement($key);
$this->toXml($value, TRUE);
$this->xml->endElement();
continue;
}
$this->xml->writeElement($key, $value);
}
if(!$eIsArray) {
$this->xml->endElement();
return $this->xml->outputMemory(true);
}
}
}
$res = array(
"AutoAccessory" =>array(
"ProductType"=>array("AutoPart"=>array("ModelYear"=>2017,
"Voltage"=>"",
"ModelName"=>"",
"ColorSpecification"=>array("Color"=>"RED",
"ColorMap"=>"RED"

)

)
))
);
$xml = new A2Xml();
echo $xml->toXml($res);
0

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

    <?php
error_reporting(E_ALL^E_NOTICE^E_WARNING);

$A_array[]="/AutoAccessory-1";
$A_array[]="/AutoAccessory-1/BodyPartExteriorFinish-1";
$A_array[]="/AutoAccessory-1/ProductType-1";
$A_array[]="/AutoAccessory-1/ProductType-1/AutoPart-1";

$A_array[]="/AutoAccessory-1/ProductType-1/AutoPart-1/ModelYear-1";
$A_array[]="/AutoAccessory-1/ProductType-1/AutoPart-1/Voltage-1";
$A_array[]="/AutoAccessory-1/ProductType-1/AutoPart-1/ModelName-1";
$A_array[]="/AutoAccessory-1/ProductType-1/AutoPart-1/ColorSpecification-1";
$A_array[]="/AutoAccessory-1/ProductType-1/AutoPart-1/ColorSpecification-1/Color-1";
$A_array[]="/AutoAccessory-1/ProductType-1/AutoPart-1/ColorSpecification-1/ColorMap-1";

$str_array=array('-1'=>'' );

foreach($A_array as $AA =>$AA_val){
//Remove left blank
$Barray[] =strtr( ltrim($A_array[$AA],'/'), $str_array );}

//print_r($Barray);///////////////////////////////////////
foreach($Barray as $Bbb =>$B_val){
//String to the array
$CTG_array[] = explode('/',$Barray[$Bbb]);
}

//print_r($CTG_array);///////////////////////////////////////

foreach($CTG_array as $Ccc =>$C_val){
//print_r($CTG_array[$Ccc]);
//if Number of layers
if(count($CTG_array[$Ccc])==1){

$sum_array[] =array($CTG_array[$Ccc][0]=>'');
}
if(count($CTG_array[$Ccc])==2){
$sum_array[] =array($CTG_array[$Ccc][0]=>array($CTG_array[$Ccc][1]=>''));
}

if(count($CTG_array[$Ccc])==3){
$sum_array[] =array($CTG_array[$Ccc][0]=>array($CTG_array[$Ccc][1]=>array($CTG_array[$Ccc][2]=>'')));
}

if(count($CTG_array[$Ccc])==4){
$sum_array[] =array($CTG_array[$Ccc][0]=>
array($CTG_array[$Ccc][1]=>
array($CTG_array[$Ccc][2]=>
array($CTG_array[$Ccc][3]=>'')
)
)
);
}

if(count($CTG_array[$Ccc])==5){
$sum_array[] =array($CTG_array[$Ccc][0]=>
array($CTG_array[$Ccc][1]=>
array($CTG_array[$Ccc][2]=>
array($CTG_array[$Ccc][3]=>
array($CTG_array[$Ccc][4]=>'')
)
)
)
);
}

if(count($CTG_array[$Ccc])==6){
$sum_array[] =array($CTG_array[$Ccc][0]=>
array($CTG_array[$Ccc][1]=>
array($CTG_array[$Ccc][2]=>
array($CTG_array[$Ccc][3]=>
array($CTG_array[$Ccc][4]=>
array($CTG_array[$Ccc][5]=>'')
)
)
)
)
);
}if(count($CTG_array[$Ccc])==7){
$sum_array[] =array($CTG_array[$Ccc][0]=>
array($CTG_array[$Ccc][1]=>
array($CTG_array[$Ccc][2]=>
array($CTG_array[$Ccc][3]=>
array($CTG_array[$Ccc][4]=>
array($CTG_array[$Ccc][5]=>
array($CTG_array[$Ccc][6]=>'')
)
)
)
)
)
);
}

if(count($CTG_array[$Ccc])==7){
$sum_array[] =array($CTG_array[$Ccc][0]=>
array($CTG_array[$Ccc][1]=>
array($CTG_array[$Ccc][2]=>
array($CTG_array[$Ccc][3]=>
array($CTG_array[$Ccc][4]=>
array($CTG_array[$Ccc][5]=>
array($CTG_array[$Ccc][6]=>
array($CTG_array[$Ccc][7]=>'')
)
)
)
)
)
)
);
}if(count($CTG_array[$Ccc])==8){
$sum_array[] =array($CTG_array[$Ccc][0]=>
array($CTG_array[$Ccc][1]=>
array($CTG_array[$Ccc][2]=>
array($CTG_array[$Ccc][3]=>
array($CTG_array[$Ccc][4]=>
array($CTG_array[$Ccc][5]=>
array($CTG_array[$Ccc][6]=>
array($CTG_array[$Ccc][7]=>
array($CTG_array[$Ccc][8]=>'')
)
)
)
)
)
)
)
);
}}//print_r($sum_array);
$array_sum =array();
foreach($sum_array as $count_int =>$count_str){

$array_sum = array_merge_recursive($array_sum,$sum_array[$count_int]);

}
//print_r($array_sum);

//array Merge example
/*
$sum_array = array('AutoAccessory'=>'');
$sum_array2 = array('AutoAccessory'=>array('BodyPartExteriorFinish'=>''));
$sum_array3 = array('AutoAccessory'=>array('ProductType'=>''));
$sum_array4 = array('AutoAccessory'=>array('ProductType'=>array('AutoPart'=>'')));
$sum_array5 = array('AutoAccessory'=>array('ProductType'=>array('AutoPart'=>array('ModelYear'=>''))));
$sum_array6 = array('AutoAccessory'=>array('ProductType'=>array('AutoPart'=>array('Voltage'=>''))));
$sum_array7 = array('AutoAccessory'=>array('ProductType'=>array('AutoPart'=>array('ModelName'=>''))));
$sum_array8 = array('AutoAccessory'=>array('ProductType'=>array('AutoPart'=>array('ColorSpecification'=>''))));

print_r(array_merge_recursive($sum_array,$sum_array2,$sum_array3,$sum_array4,$sum_array5,$sum_array6,$sum_array7,$sum_array8));
*/class A2Xml {
private $version    = '1.0';
private $encoding   = 'UTF-8';
private $root       = 'ProductData';
private $xml        = null;
function __construct() {
$this->xml = new XmlWriter();
}
function toXml($data, $eIsArray=FALSE) {
if(!$eIsArray) {
$this->xml->openMemory();
$this->xml->startDocument($this->version, $this->encoding);
$this->xml->startElement($this->root);
}
foreach($data as $key => $value){
if(is_array($value)){
$this->xml->startElement($key);
$this->toXml($value, TRUE);
$this->xml->endElement();
continue;
}
$this->xml->writeElement($key, $value);
}
if(!$eIsArray) {
$this->xml->endElement();
return $this->xml->outputMemory(true);
}
}
}
//array to XML
$xml = new A2Xml();
echo $xml->toXml($array_sum);?>
0

Поскольку, кажется, нет никакого движения в этом, я решил (для моего собственного опыта) написать кое-что …

<?php
error_reporting ( E_ALL );
ini_set ( 'display_errors', 1 );

$A_array[]="/AutoAccessory-1";
$A_array[]="/AutoAccessory-1/BodyPartExteriorFinish-1";
$A_array[]="/AutoAccessory-1/ProductType-1";
$A_array[]="/AutoAccessory-1/ProductType-1/AutoPart-1";

$A_array[]="/AutoAccessory-1/ProductType-1/AutoPart-1/ModelYear-1";
$A_array[]="/AutoAccessory-1/ProductType-1/AutoPart-1/Voltage-1";
$A_array[]="/AutoAccessory-1/ProductType-1/AutoPart-1/ModelName-1";
$A_array[]="/AutoAccessory-1/ProductType-1/AutoPart-1/ColorSpecification-1";
$A_array[]="/AutoAccessory-1/ProductType-1/AutoPart-1/ColorSpecification-1/Color-1";
$A_array[]="/AutoAccessory-1/ProductType-1/AutoPart-1/ColorSpecification-1/ColorMap-1";

$xml = new DOMDocument();
foreach ( $A_array as $element ){
$levels = explode('/', $element);
// Remove first element as it's pre the /
array_shift($levels);
$base = $xml->documentElement;
// If there isn't a root node created yet...
if ( $base == null )    {
$base = $xml->createElement(trim($levels[0],'-1'));
$xml->appendChild($base);
}
// Loop over the remaining levels
for ( $i = 1; $i < count($levels); $i++ )   {
// Find if the next element is a current child
$found = false;
foreach ( $base->childNodes as $node ){
if ( $node->nodeName == trim($levels[$i],'-1') ){
$base = $node;
$found = true;
break;
}
}
// If not found, create a new element and add it in
if ( $found == false )  {
$newNode = $xml->createElement(trim($levels[$i],'-1') );
$base->appendChild( $newNode );
$base = $newNode;
}
}
}

$xml->formatOutput = true;
echo $xml->saveXML();
-1
По вопросам рекламы ammmcru@yandex.ru
Adblock
detector