したがって、次のコンバーター関数が作成されました(ちなみに、私はcodeigniterで使用していますが、これは詳細を紹介していません)。
if ( ! function_exists('std2simplexml')) { function std2simplexml($object,$recursive=false) { $xml = new DOMDocument; $root = $xml->createElement('root'); $xml->appendChild($root); foreach ($object as $key => $child) { if (is_object($child)) { $new_xml = std2simplexml($child,true); $new_xml = str_replace(array('','',''),'',$new_xml); $el = $xml->createElement($key,$new_xml); } else { $el = $xml->createElement($key,$child); } $root->appendChild($el); } if (!$recursive) { $simple_xml = simplexml_load_string(html_entity_decode($xml->saveXml())); return $simple_xml; } else { return $xml->saveXml(); } } }
機能は小さいですが、それは粗雑なものであると確信していますが、機能しているため、これまでのところ、消化しないように遭遇していません。
簡単な例では、次のようになります。
コントローラー:
// $book_obj = $this->book->getBookPage($book,$page/2); // php $future_xml = new stdclass; // $future_xml->book = $book_obj; // - $future_xml->blabla = $blabla;
表示:
// SimpleXML $xml = std2simplexml($future_xml); // , $xml->template->base_url = base_url(); $xml->template->title = ' '; // $xsl = simplexml_load_file( APPPATH.'templates/index.xsl' ); $proc= new XSLTProcessor(); $proc->importStyleSheet($xsl); echo $proc->transformToXML($xml);
着信オブジェクト:
$xml = std2simplexml($future_xml);
stdClass Object ( [cycle_book] => [title_book] => [sub] => stdClass Object ( [id_book] => 1 [id_category_book] => 4 ) )
結果(オブジェクト):
SimpleXMLElement Object ( [cycle_book] => [title_book] => [sub] => SimpleXMLElement Object ( [id_book] => 1 [id_category_book] => 4 ) )
結果(XML):
<root> <id_book>1</id_book> <id_category_book>4</id_category_book> <sub> <id_book>1</id_book> <id_category_book>4</id_category_book> </sub> </root>
誰かがより文明的な解決策を提案したら、私は嬉しいです。
さて、いくつかの不在では、この機能は誰かによく役立ちます。