在 PHP 中将 JSON 转换为 XML,但在 XML 中为 JSON 数组创建一个容器元素
Posted
技术标签:
【中文标题】在 PHP 中将 JSON 转换为 XML,但在 XML 中为 JSON 数组创建一个容器元素【英文标题】:Convert JSON to XML in PHP, but create a container element in XML for JSON array 【发布时间】:2022-01-02 05:55:06 【问题描述】:在开始之前,我在这里/互联网上阅读了很多帖子/主题,但据我了解,我认为我看到的所有解决方案都无法处理这个 JSON
我有一个 JSON 文件,我希望将其转换为 XML 文件 - 问题是,在正常转换为 XML 时,像这样的 JSON -
"data":
"key4":
"sample8": [
"sample9":"val",
"sample10":"val"
,
"sample11":"val",
"sample12":"val"
,
"sample13":"val",
"sample14":"val"
]
变成-
<?xml version="1.0"?>
<data>
<key4>
<sample8>
<sample9>val</sample9>
<sample10>val</sample10>
</sample8>
<sample8>
<sample11>val</sample11>
<sample12>val</sample12>
</sample8>
<sample8>
<sample13>val</sample13>
<sample14>val</sample14>
</sample8>
</key4>
</data>
但是,我要做的是在 XML 中为每个 JSON 数组创建一个容器元素,并具有特定的数组项元素名称(如“item”)。这是我想要的 XML 结果的示例 -
<?xml version="1.0"?>
<data>
<key4>
<sample8>
<item>
<sample9>val</sample9>
<sample10>val</sample10>
</item>
<item>
<sample11>val</sample11>
<sample12>val</sample12>
</item>
<item>
<sample13>val</sample13>
<sample14>val</sample14>
</item>
</sample8>
</key4>
</data>
我该怎么做?正如我所说,我尝试了许多不同的方法,但似乎没有任何效果...请指导 :) 谢谢!
P.S. 如果 php 不支持这种转换,我可以使用任何其他支持这种转换的语言。 ????
【问题讨论】:
看看***.com/questions/9544840/php-json-or-array-to-xml/… 你现在用什么来处理json到xml的转换? 嗨@IGP - 目前没有,因为我使用的所有想法都没有成功,所以我删除了它们...... 我已经设法用 simplexml 做到了。我将其发布为答案 非常感谢@IGP - 这对我有很大帮助:) 【参考方案1】:$json = <<<JSON
"data":
"key4":
"sample8": [
"sample9":"val",
"sample10":"val"
,
"sample11":"val",
"sample12":"val"
,
"sample13":"val",
"sample14":"val"
]
JSON;
function toXml($node, $array)
foreach ($array as $key => $value)
if (is_array($value))
toXml($node->addChild(is_numeric($key) ? 'item' : $key), $value);
else
$node->addChild($key, $value);
// convert to array
$jsonArr = json_decode($json, true);
/*
$jsonArr = [
"data" => [
"key4" => [
"sample8" => [
[
"sample9" => "val",
"sample10" => "val"
],
[
"sample11" => "val",
"sample12" => "val"
],
[
"sample13" => "val",
"sample14" => "val"
]
]
]
]
]
*/
// initiate SimpleXMLElement with the root node and the xlmns:ajson attribute
$xml = new SimpleXMLElement('<data xmlns:ajson="http://www.altova.com/json"/>');
// use array_shift to skip first element (data)
toXml($xml, array_shift($jsonArr));
// your xml
echo $xml->asXML();
如果你想看到它带有空格和换行符,你可以将它传递给 DomDocument。
$xmlDocument = new DOMDocument('1.0');
$xmlDocument->preserveWhiteSpace = false;
$xmlDocument->formatOutput = true;
$xmlDocument->loadXML($xml->asXML());
echo $xmlDocument->saveXML();
【讨论】:
非常感谢@IGP 的解决方案!当我运行你的代码时,我从 echo 中看到的只是val val val val val val
,这是我的价值观。 - 如何查看结果的正确 XML 内容? - 请指导...谢谢!
奇怪,我可以将 xml 作为字符串就好了。试试var_dump($xml->asXML());
或var_dump($xmlDocument->saveXML());
我在replit.com/@-IGP/json-to-xml有一个工作示例以上是关于在 PHP 中将 JSON 转换为 XML,但在 XML 中为 JSON 数组创建一个容器元素的主要内容,如果未能解决你的问题,请参考以下文章