在PHP中不使用JSON_编码将XML转换为JSON

在PHP中不使用JSON_编码将XML转换为JSON,php,json,simplexml,Php,Json,Simplexml,我正在尝试将XML转换为JSON,而不使用JSON_encode/JSON_decode。我有以下代码,请记住,我是PHP和JSON新手 <?php $myXMLData = "<test> <info> <sample> <sampleOne>test</sampleOne> <sampleTwo>test two</sampleTwo>

我正在尝试将XML转换为JSON,而不使用JSON_encode/JSON_decode。我有以下代码,请记住,我是PHP和JSON新手

<?php
$myXMLData = 
"<test>
   <info>
      <sample>
         <sampleOne>test</sampleOne>
         <sampleTwo>test two</sampleTwo>
         <values value='today'>
            <sampleThree>test three</sampleThree>
            <sampleFour>test four</sampleFour>
                <sampleFive>
                    <sampleSix>test six</sampleSix>
                </sampleFive>   
         </values>
      </sample>
    </info>
</test>";

$contents=simplexml_load_string($myXMLData) or die("Error: Cannot create object");

//print_r($contents);

echo '{"' . $contents->getName() . '":{"';

foreach ($contents->children() as $child1)
{ 
    $child1->count();
    echo $child1->getName() . '": {"';
    echo $child1->attributes();
    echo $child1[0];

    foreach ($child1->children() as $child2)
    { 
        $child2->count();
        echo $child2->getName() . '": {"';
        echo $child2->attributes();
        echo $child2[0] . ": ";

        foreach ($child2->children() as $child3)
        {
            $child3->count();
            echo $child3->getName() . '": {"';
            echo $child3->attributes();
            echo $child3[0];

            foreach ($child3->children() as $child4)
            { 
                $child4->count();
                echo $child4->getName();
                echo $child4->attributes();
                echo $child4[0];


                foreach ($child4->children() as $child5)
                {
                    echo $child5->getName();
                    echo $child5->attributes();
                    echo $child5[0];
                }
            }
        }
    }
}
echo "}";
?>

我不确定这是否是一种好的方法。但我已经花了几个小时在这个问题上,我似乎找不到解决这个问题的办法

如评论中所述,递归是这里的方法。您基本上需要一个函数,该函数获取一个SimpleXMLElement作为参数,并以每个子元素作为参数递归调用自身。这应该让您了解如何执行此操作(但对于多个子项,没有属性处理,也没有commata):


代码没有经过测试,但它只是一个起点。希望这有帮助:)

只要。。如果没有json_编码,为什么要这样做?那没有任何意义。我知道这是我被要求做的一项实际任务。我试图找到json_编码文件,看看他们是如何做到的。但不知道该往哪里看。@Dino有没有改变这些要求的视角?是的,这是一个荒谬的要求。如果仍然允许您使用SimpleXML,则更是如此。如果您想了解它是如何在PHP中完成的,您可以尝试通过C代码进行跟踪@Yoshi很遗憾没有。无论如何我都能做到,但我不能使用json_编码/解码
{
  "test": {
    "info": {
      "sample": {
        "sampleOne": "test",
        "sampleTwo": "test two",
        "values": {
          "-value": "today",
          "sampleThree": "test three",
          "sampleFour": "test four",
          "sampleFive": { "sampleSix": "test six" }
        }
      }
    }
  }
}
$masterNode = simplexml_load_string($string);
convertNodeToJSON($masterNode);

function convertNodeToJSON($node) {
    if ($node->count === 0) { // the current node is text
        echo '"' . $node->getName() . '"';
        return;
    }
    echo '{ "' . $node->getName() . '" : ';
    foreach ($node->attributes as $attr) {
        // handle attributes
    }
    foreach ($node->children() as $child) {
        convertNodeToJSON($child);
        // add a comma if necessary
    }
    echo "}";
}