0

私のxmlファイルは次のようになります。

<?xml version="1.0" encoding="utf-8"?>
<root>
  <item>
    <Post>
      <id><![CDATA[1]]></id>
      <title><![CDATA[The title]]></title>
      <body><![CDATA[This is the post body.]]></body>
      <created><![CDATA[2008-07-28 12:01:06]]></created>
      <modified><![CDATA[]]></modified>
    </Post>
  </item>
  <item>
    <Post>
      <id><![CDATA[2]]></id>
      <title><![CDATA[A title once again]]></title>
      <body><![CDATA[And the post body follows.]]></body>
      <created><![CDATA[2008-07-28 12:01:06]]></created>
      <modified><![CDATA[]]></modified>
      <item>
        <item><![CDATA[fdgs]]></item>
      </item>
    </Post>
  </item>
  <item>
    <Post>
      <id><![CDATA[3]]></id>
      <title><![CDATA[Title strikes back]]></title>
      <body><![CDATA[This is really exciting Not.]]></body>
      <created><![CDATA[2008-07-28 12:01:06]]></created>
      <modified><![CDATA[]]></modified>
    </Post>
  </item>
</root>

これが私の期待される出力です:

Array(
0=>Array(
    'Post'=>Array(
        'id'=>1, 
        'title'=>'The title', 
        'body'=>'This is the post body.', 
        'created'=>'2008-07-28 12:01:06', 
        'modified'=>'',)
        ), 
1=>Array(
    'Post'=>Array(
        'id'=>2, 
        'title'=>'A title once again', 
        'body'=>'And the post body follows.', 
        'created'=>'2008-07-28 12:01:06', 
        'modified'=>'', 
        array('fdgs'),)
        ), 
2=>Array(
    'Post'=>Array(
        'id'=>3, 
        'title'=>'Title strikes back', 
        'body'=>'This is really exciting Not.', 
        'created'=>'2008-07-28 12:01:06', 
        'modified'=>'',)
        ),
);

そして、これは私のコードです:

$xml=new Xml2Array();
        $xmlData = simplexml_load_file('d:\\xmlfile\\Array2XmlExampleData.xml');
        $expectedResult=$xml->simpleXMLToArray($xmlData);
        var_dump($expectedResult);

var_dump() から取得した配列の結果は null です。どうすればこの問題を解決できますか? 私を助けてください、ありがとう。

4

1 に答える 1

0

関連する機能を示していませんsimpleXMLToArray()。そのため、コードの何が問題なのかを正確に判断することはできません。

しかし、SimpleXML-Object を配列に変換することは、実際にはそれほど難しくありません。これを行う 1 つの方法を次に示します。

$array = json_decode( json_encode( (array) $xmlData ), true);

指定された XML を配列に変換します。LIBXML_NOCDATAしかし、あなたのケースでそれを機能させるには、フラグを使用してデータをロードする必要があります(ドキュメントを参照):

$xmlData = simplexml_load_file('d:\\xmlfile\\Array2XmlExampleData.xml', 'SimpleXMLElement', LIBXML_NOCDATA);

次に、XML をロードし、<item>-tags を反復処理して、それらを配列に変換します。

$xmlData = simplexml_load_file(
      'd:\\xmlfile\\Array2XmlExampleData.xml', 
      'SimpleXMLElement', 
      LIBXML_NOCDATA
);

$results = [];

foreach($xmlData->item as $item)
{
  $results[] = json_decode(json_encode((array)$item), true);
}

これが実際のです。もちろん、サニタイズ ロジックを追加して、不要な要素をフィルター処理したり、書式設定を行ったりする必要があります。しかし、あなたはその考えを理解します。

また、xml が適切にロードされていること、およびアプリケーションにファイルの読み取り権限があることを確認してください。

于 2013-11-09T15:22:21.567 に答える