Berbicara kode
$xchange = new SimpleXMLElement('http://www.bankisrael.gov.il/currency.xml', NULL, TRUE);
$filterCurrencies = array( 'USD', 'GBP' );
$filter = implode( array_map( function($filler) { return 'text()="'.$filler.'"'; }, $filterCurrencies), ' or ' );
$xpathQuery = $xpath = '//CURRENCYCODE[%filter%]/parent::*';
$xpathQuery = str_replace('%filter%', , $xpathQuery);
$currencies = $xchange->xpath($xpathQuery);
/** I do know you already have to code to echo it ... the code is tested, feel free to copy&pase **/
Langkah demi Langkah
Oke, pertama-tama, Anda menggunakan objek SimpleXML untuk membaca data dari bank israel. Saya menyarankan untuk memanfaatkan objek ini untuk melakukan sebagian besar pekerjaan (yang jauh lebih cepat dibandingkan dengan pemfilteran dengan PHP, meskipun SimpleXML bukan yang terbaik untuk kinerja).
Jadi pertama-tama, apa yang ingin kita capai? Mendapatkan Data berdasarkan konten elemennya. Untuk seorang Webdesigner ini seharusnya terdengar seperti CSS, tapi kurang tepat. Untuk pengembang web yang sedang mencoba XML yang seharusnya terdengar seperti XPath, ini adalah pilihan emas! Untungnya, SimpleXML memungkinkan kita menggunakan XPath, jadi kita akan membuat kueri:
Dasar-dasar XPath:
//CURRENCYCODE
akan memilih elemen kode mata uang apa pun
//CURRENCYCODE/parent::*
akan memilih induk kode mata uang (<CURRENCY>
), di mana data kita berada
//CURRENCYCODE[text()="JPY"]
hanya akan memilih <CURRENCY>
elemen yang teksnya sama tepatnya JPY.
Di sini kami memberi garam dengan daftar persyaratan kami:
$filterCurrencies = array( 'USD', 'GBP' ); // we want us dollars and british pounds
$filter = implode( array_map( function($token) { return 'text()="'.$token.'"'; }, $filterCurrencies), ' or ' );
// this will make a string like 'text()="USD" or text()="GBP"' by mapping the filter against the requirements string (currenciecodes get tokens) glueing it with a logical or
Sekarang satu-satunya hal yang harus dilakukan adalah mengintegrasikannya dengan template XPATH kami
$xpath = '//CURRENCY[%filter%]/parent::*';
$xpath = str_replace('%filter%', $filter, $xpath);
$currencies = $xchange->xpath($xpath);
Selamat mengulang!
person
Samuel Herzog
schedule
01.06.2011