[英]Convert PHP nested array to XML tree structure
我在PHP中有以下数组,我想将其转换为等效的XML。
$data = array("VitalParameters"=>array(
"Details"=>array(
"PID"=>1234,
"OPID"=>1345
),
"Parameters"=>array(
"HR"=>112,
"SPO2"=>0
)));
遵循我期望的XML树结构
<VitalParameters>
<Details>
<PID>1234</PID>
<OPID>1345</OPID>
</Details>
<Parameters>
<HR>112</HR>
<SPO2>0</SPO2>
</Parameters>
</VitalParameters>
我尝试了很多事情,但是没有运气。 如果需要更多信息,请发表评论。
尝试Array2XML( http://www.lalit.org/lab/convert-php-array-to-xml-with-attributes )对我有用。
$data = array(
"Details" => array(
"PID" => 1234,
"OPID" => 1345
),
"Parameters" => array(
"HR" => 112,
"SPO2" => 0
));
$xml = Array2XML::createXML('VitalParameters', $data)->saveXML();
echo $xml;
产量
<?xml version="1.0" encoding="UTF-8"?>
<VitalParameters>
<Details>
<PID>1234</PID>
<OPID>1345</OPID>
</Details>
<Parameters>
<HR>112</HR>
<SPO2>0</SPO2>
</Parameters>
</VitalParameters>
这应该使您走上正确的轨道,尽管可能需要进行一些调整(尤其是在键方面以及首先检查$ arr是否是数组/对象……这只是向您展示如何递归地迭代它们,以及打印数据)。
另外,此代码段不以任何方式支持XML属性。
<?php
$data = array("VitalParameters"=>array(
"Details"=>array(
"PID"=>1234,
"OPID"=>1345
),
"Parameters"=>array(
"HR"=>112,
"SPO2"=>0
)));
function ArrayToXML($arr, $depth = 0, $maxDepth = 2)
{
$retVal = "";
foreach($arr as $key => $value)
{
$retVal .= "<" . $key . ">";
$type = gettype($value);
switch($type)
{
case "array":
case "object":
if ($depth < $maxDepth)
$retVal .= ArrayToXml($value, $depth+1, $maxDepth);
else
$retVal .= $type; // Depth >= MaxDepth, not iterating here
break;
case "boolean":
$retVal .= $value ? "true" : "false";
break;
case "resource":
$retVal .= "Resource";
case "NULL":
$retVal .= "NULL";
default:
$retVal .= $value;
}
$retVal .= "</" . $key . ">\n";
}
return $retVal;
}
echo ArrayToXML($data);
?>
输出:
<VitalParameters><Details><PID>1234</PID>
<OPID>1345</OPID>
</Details>
<Parameters><HR>112</HR>
<SPO2>0</SPO2>
</Parameters>
</VitalParameters>
我得到了如下代码的解决方案
<?php
header("Content-type: text/xml; charset=utf-8");
$data = array(
"Details" => array(
"PID" => "1234","OPID" => "1345"
),"Parameters" => array(
"HR" => "112","SPO2" => "0"
)
);
$domtree = new DOMDocument('1.0', 'UTF-8');
/* create the root element of the xml tree */
$xmlRoot = $domtree->createElement("VitalParameters");
/* append it to the document created */
$xmlRoot = $domtree->appendChild($xmlRoot);
foreach ($data as $key=>$value)
{
$currentElement= $domtree->createElement($key);
$currentElement= $xmlRoot->appendChild($currentElement);
if(is_array($value))
{
foreach ($value as $k=>$v)
{
$currentElement->appendChild($domtree->createElement($k,$v));
}
}
}
/* get the xml printed */
echo $domtree->saveXML();
产量
<VitalParameters>
<Details>
<PID>1234</PID>
<OPID>1345</OPID>
</Details>
<Parameters>
<HR>112</HR>
<SPO2>0</SPO2>
</Parameters>
</VitalParameters>
我认为-这必须更简单:
function arrayToXML($arr){
$s = "";
foreach($arr as $k => $v){
if(is_array($v)){$v = arrayToXML($v);}
$s .= "<{$k}>{$v}</{$k}>";
}
return $s;}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.