Как строка переходит в 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>
Я не могу думать о методах
Кто может мне помочь или дать мне несколько идей
буду очень благодарна
Спасибо
В настоящее время я превращаюсь в массив
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);
<?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);?>
Поскольку, кажется, нет никакого движения в этом, я решил (для моего собственного опыта) написать кое-что …
<?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();