Selam ve seyir için teşekkürler.
Ben SimpleXML ile bunu nasıl yapabilirim, aşağıdaki linkten 1 GBP = USD sonra parantez içinde sadece değerini almak için çalışıyorum?
http://www.sloomedia.com/currency/feeds/GBP.xml
Thanks, Ben.
Selam ve seyir için teşekkürler.
Ben SimpleXML ile bunu nasıl yapabilirim, aşağıdaki linkten 1 GBP = USD sonra parantez içinde sadece değerini almak için çalışıyorum?
http://www.sloomedia.com/currency/feeds/GBP.xml
Thanks, Ben.
XPath ile deneyebilirsiniz:
$xml = new SimpleXMLElement($string);
/* On cherche <item><title> */
$result = $xml->xpath('/item/title');
while(list( , $node) = each($result)) {
$matches = array();
preg_match('/\((.*)\)/', $node, $matches);
//do wathever you need with result
//echo $matches[1];
}
Ben hızlı bir şekilde yazılı regexpi test değil, sen '1 YTL = XXX 'uzunluğu olarak daha iyi bir şey ya da kullanım substr bulabilirsiniz dosyasında sabittir
Amacıyla "izole" (ya da daha doğrusu, select) doğru düğüm için, size XPath işlevi starts-with()
a> kullanabilirsiniz.
Düğümünü seçtikten sonra, hala içeriğini ayrıştırmak zorunda. Bunun için, size PHP dize işleme fonksiyonu her türlü kullanabilirsiniz.
$rss = simplexml_load_file('http://www.sloomedia.com/currency/feeds/GBP.xml');
$nodes = $rss->xpath('//item[starts-with(title, "1 GBP = USD")]');
if (empty($nodes))
{
die('No GBP = USD nodes');
}
// Now you got the right node in $nodes[0], you just have to extract the value in parentheses
// The simple way -- 13 is the number of characters in "1 GBP = USD ("
$usd = substr($nodes[0]->title, 13, -1);
// The flexible way
if (!preg_match('#\\(([0-9]+\\.[0-9]+)\\)#', $nodes[0]->title, $m))
{
die('Could not parse the value');
}
$usd = $m[1];
// If you want to parse every item
foreach ($rss->channel->item as $item)
{
if (!preg_match('#1 ([A-Z]+) = ([A-Z]+) \\(([0-9]+\\.[0-9]+)\\)#', $item->title, $m))
{
echo 'Could not parse ', $item->title, "\n";
continue;
}
echo '1 ', $m[1], ' = ', $m[3], ' ', $m[2], "\n";
}