将PHP嵌套数组转换为XML树结构
我在PHP中有以下数组,我想将其转换为等价的XML将PHP嵌套数组转换为XML树结构,php,xml,Php,Xml,我在PHP中有以下数组,我想将其转换为等价的XML $data = array("VitalParameters"=>array( "Details"=>array( "PID"=>1234, "OPID"=>1345 ), "Parameters"=>
$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>
1234
1345
112
0
我尝试了很多事情,但没有成功。如果需要更多信息,请发表评论,我将提供更多信息。试试Array2XML(),这对我很有用
$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>
1234
1345
112
0
这应该会让您走上正确的轨道,但可能需要一些调整(特别是在关键点方面,以及首先检查$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);
?>
$value)
{
$retVal.=“”;
$type=gettype($value);
交换机($类型)
{
案例“数组”:
案例“对象”:
如果($depth<$maxDepth)
$retVal.=ArrayToXml($value、$depth+1、$maxDepth);
其他的
$retVal.=$type;//Depth>=MaxDepth,此处不迭代
打破
案例“布尔”:
$retVal.=$value?“真”:“假”;
打破
案例“资源”:
$retVal.=“资源”;
“空”情况:
$retVal.=“空”;
违约:
$retVal.=$value;
}
$retVal.=“\n”;
}
返回$retVal;
}
echo ArrayToXML($data);
?>
输出:
<VitalParameters><Details><PID>1234</PID>
<OPID>1345</OPID>
</Details>
<Parameters><HR>112</HR>
<SPO2>0</SPO2>
</Parameters>
</VitalParameters>
1234
1345
112
0
我得到了如下代码所示的解决方案
<?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();
数组(
“PID”=>“1234”、“OPID”=>“1345”
),“参数”=>数组(
“心率”=>“112”,“血氧饱和度”=>“0”
)
);
$domtree=新的DOMDocument('1.0','UTF-8');
/*创建xml树的根元素*/
$xmlRoot=$domtree->createElement(“VitalParameters”);
/*将其附加到创建的文档中*/
$xmlRoot=$domtree->appendChild($xmlRoot);
foreach($key=>$value形式的数据)
{
$currentElement=$domtree->createElement($key);
$currentElement=$xmlRoot->appendChild($currentElement);
if(是_数组($value))
{
foreach($k=>v的值)
{
$currentElement->appendChild($domtree->createElement($k,$v));
}
}
}
/*打印xml*/
echo$domtree->saveXML();
输出
<VitalParameters>
<Details>
<PID>1234</PID>
<OPID>1345</OPID>
</Details>
<Parameters>
<HR>112</HR>
<SPO2>0</SPO2>
</Parameters>
</VitalParameters>
1234
1345
112
0
我认为-这必须更简单:
function arrayToXML($arr){
$s = "";
foreach($arr as $k => $v){
if(is_array($v)){$v = arrayToXML($v);}
$s .= "<{$k}>{$v}</{$k}>";
}
return $s;}
函数arrayToXML($arr){
$s=“”;
foreach($arr为$k=>$v){
if(is_数组($v)){$v=arrayToXML($v);}
$s.=“{$v}”;
}
返回$s;}
Down-voted请评论您想要的内容或给downvoteI提供建议我尝试过但给我错误,如XML解析错误:找不到元素
您在使用firefox吗?看看。在谷歌浏览器中,chrome也不起作用,我得到的这个XML文件似乎没有任何与之相关的样式信息。文档树如下图所示。
我可以像
那样设置标题吗?因为我想将文件另存为XML。您的代码提供了正确的输出,但没有像我上面提到的那样显示标题,因此如何设置标题?您应该能够使用PHPsheader()
函数发送内容类型。正如我所提到的:这不是一个完全充实的XML实现。属性不起作用,键缺少健全性检查,可能还有更多。