在 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-&gt;asXML());var_dump($xmlDocument-&gt;saveXML()); 我在replit.com/@-IGP/json-to-xml有一个工作示例

以上是关于在 PHP 中将 JSON 转换为 XML,但在 XML 中为 JSON 数组创建一个容器元素的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Ruby 中将 JSON 转换为 XML?

在java中将带有命名空间的xml转换为json

在 Android 中将 XML 转换为 JSON 会出错

在 C# 中将 JSON 数组转换为 XML

如何在 C# 中将 Xml 转换为 Json,反之亦然

仅在 XML 中忽略字段,但在 Spring Boot(xml 映射器)中不忽略 json