stdClassをSimpleXml関数に変換

ある個人的なプロジェクト(そして、私は長い間試してみたかっただけです)のために、テンプレートエンジンとしてXSLTを使用することにしました。 すべてが素晴らしいようです:xsl-transformationsにはSimpleXmlオブジェクトが必要であり、オブジェクトもデータベースから返されます、それは問題のようです、なぜデータベースからテンプレートエンジンにオブジェクトを直接転送できないのですか?







ただし、オブジェクトをxsltテンプレートエンジンに直接出力することはできません。 おそらく確認しませんが、新しい二輪の友人を作成する前に検索しました。 便利な機会のための自転車建設の個人的なミニ時代はすでに過ぎています。



したがって、次のコンバーター関数が作成されました(ちなみに、私は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>
      
      







誰かがより文明的な解決策を提案したら、私は嬉しいです。

さて、いくつかの不在では、この機能は誰かによく役立ちます。



All Articles