PHP simpleXML输出语法无效

时间:2014-02-17 17:16:06

标签: php xml simplexml

我的问题是php simpleXML,我有一个函数可以将我的数组转换为xml,但有时会忘记放置每个“<”所以xml无效。以前有人见过这样的东西吗?

private function array_to_xml($baseInfo, &$xmlBaseInfo) {

    foreach($baseInfo as $key => $value) {
        if(is_array($value)) {
            if(!is_numeric($key)){
                $subnode = $xmlBaseInfo->addChild("$key");
                $this->array_to_xml($value, $subnode);
            }
            else{
                $subnode = $xmlBaseInfo;
                $this->array_to_xml($value, $subnode);
            }
        }
        else {
            $value = utf8_encode($value);               
            $value = str_replace("&", "&", $value);

            $xmlBaseInfo->addChild("$key", $value);

        }
    }
} 

这就是我在课堂上称呼它的方式:

 $xmlBaseInfo = new SimpleXMLElement('<'.'?xml version="1.0" encoding="iso-8859-2" ?'.'>'."\n" ."<data></data>");
    $this->array_to_xml($this->data,$xmlBaseInfo);
    $dom = new DOMDocument('1.0');
    $dom->preserveWhiteSpace = false;
    $dom->formatOutput = true;
    $dom->loadXML($xmlBaseInfo->asXML());
    echo $dom->saveXML();

我怎么说有时它会像这样输出xml:

<?xml version="1.0" encoding="iso-8859-2"?>
<data>
  <jatek_id>1</jatek_id>
  <cim>The Big Bang Theory</cim>
  <alcim>alcím</alcim>
  <leiras>Lorem Ipsum....</leiras>
  <fotonev></fotonev>
  <status>0</status>
  <megjelenik>Nov 11 2011 11:11:11:000AM</megjelenik>
  <winnertext/>
  <szabaly/>
  <lap_id>9</lap_id>
  <questions>
    <question>
      <jatekkerdes_id>1</jatekkerdes_id>
      <jatek_id>1</jatek_id>
      <kerdes>Tyúk vagy tojás</kerdes>
      <sorrend>10</sorrend>
      <megoldas>1</megoldas>
      <fotonev/>
      <answers>
        <answer>
          <jatekvalasz_id>1</jatekvalasz_id>
          <kerdes_id>1</kerdes_id>
          <valasz>Tyúk</valasz>
          <sorrend>10</sorrend>
          <fotonev/>
        </answer>
        <answer>
          <jatekvalasz_id>2</jatekvalasz_id>
          <kerdes_id>1</kerdes_id>
          <valasz>Tojás</valasz>
          <sorrend>20</sorrend>
          <fotonev/>
        </answer>
      </answers>
    </question>
    <question>
      <jatekkerdes_id>2</jatekkerdes_id>
      <jatek_id>1</jatek_id>
      <kerdes>Almafa vagy borecet?</kerdes>
      <sorrend>20</sorrend>
      <megoldas>3</megoldas>
      <fotonev/>
      <answers>
        <answer>
          <jatekvalasz_id>3</jatekvalasz_id>
          <kerdes_id>2</kerdes_id>
          valasz>Almafa</valasz>    //Here is the problem! missing <
          <sorrend>30</sorrend>
          <fotonev/>
        </answer>
        <answer>
          <jatekvalasz_id>4</jatekvalasz_id>
          <kerdes_id>2</kerdes_id>
          <valasz>Borecet</valasz>
          <sorrend>40</sorrend>
          <fotonev/>
        </answer>
      </answers>
    </question>
  </questions>
</data>

帮助

这个数组发生了:

Array
(
[jatek_id] => 1
[cim] => The Big Bang Theory
[alcim] => alcím
[leiras] => Lorem Ipsum...
[fotonev] => 
[status] => 0
[megjelenik] => Nov 11 2011 11:11:11:000AM
[winnertext] => 
[szabaly] => 
[lap_id] => 9
[questions] => Array
    (
        [0] => Array
            (
                [question] => Array
                    (
                        [jatekkerdes_id] => 1
                        [jatek_id] => 1
                        [kerdes] => Tyúk vagy tojás
                        [sorrend] => 10
                        [megoldas] => 1
                        [fotonev] => 
                        [answers] => Array
                            (
                                [0] => Array
                                    (
                                        [answer] => Array
                                            (
                                                [jatekvalasz_id] => 1
                                                [kerdes_id] => 1
                                                [valasz] => Tyúk
                                                [sorrend] => 10
                                                [fotonev] => 
                                            )

                                    )

                                [1] => Array
                                    (
                                        [answer] => Array
                                            (
                                                [jatekvalasz_id] => 2
                                                [kerdes_id] => 1
                                                [valasz] => Tojás
                                                [sorrend] => 20
                                                [fotonev] => 
                                            )

                                    )

                            )

                    )

            )

        [1] => Array
            (
                [question] => Array
                    (
                        [jatekkerdes_id] => 2
                        [jatek_id] => 1
                        [kerdes] => Almafa vagy borecet?
                        [sorrend] => 20
                        [megoldas] => 3
                        [fotonev] => 
                        [answers] => Array
                            (
                                [0] => Array
                                    (
                                        [answer] => Array
                                            (
                                                [jatekvalasz_id] => 3
                                                [kerdes_id] => 2
                                                [valasz] => Almafa
                                                [sorrend] => 30
                                                [fotonev] => 
                                            )

                                    )

                                [1] => Array
                                    (
                                        [answer] => Array
                                            (
                                                [jatekvalasz_id] => 4
                                                [kerdes_id] => 2
                                                [valasz] => Borecet
                                                [sorrend] => 40
                                                [fotonev] => 
                                            )

                                    )

                            )

                    )

            )

    )

)

1 个答案:

答案 0 :(得分:0)

问题'解决了'......

看起来我们的公司服务器有问题。在不同的计算机上尝试,输出无bug。

非常感谢你的帮助:)