XPath - $ var seçme çocuk

4 Cevap php

Ben tüm <title> ve PHP kullanarak bir listede bir RSS 2.0 beslemesi <description> öğelerini yazdırmak çalışıyorum. Ben sadece kullanarak bu unsurları alabilir: $rss->xpath('rss/channel/item/title | rss/channel/item/description') ama ben biraz farklı kullanmak istiyorum.

Ben böyle bir foreach deyimi kullanarak tüm <item> öğeleri boyunca yineleme için PHP kullanmak istiyorum:

<?php
foreach($xml->xpath('/rss/channel/item') as $item){
    print_r($item->xpath('title'));
}
?>

Ama $item->xpath('title') başlık elemanının içindeki metni döndürmek, ancak bir dizi döndürür değildir:

Array
(
  [0] => SimpleXMLElement Object
    (
      [0] => Ubuntu 10.04 LTS 'Lucid Lynx' laat Gnome 3 nog links liggen
    )
)

Neden öğesi içinde bir dizi değil metin çıkmıyor?

4 Cevap

Deneyin:

foreach($xml->xpath('/rss/channel/item') as $item)
{
    print_r($item->title); // This pulls out the simpleXML object
    print_r((string)$item->title); // This pulls out the string as expected
}

SimpleXML kullanırken başka bir XPath sorgusu kullanmaya gerek yoktur, ilk XPath XPath eşleşen SimpleXML nesnesinin bir dizi çekin olacaktır. Sonra yapmanız gereken tüm bu SimpleXML nesnenin bir özelliği sanki düğümü erişmek olduğunu. Eğer bir dize olarak kullanılacak istiyorsanız o zaman-ön özelliği (string) koyarak birine döküm gerekir.

xpath function yolunu eşleşen elemanların bir dizi döndürür. Eğer bir eleman ile dış dizisini almak Demek bu yüzden. Sen başlık almak için xpath kullanmak istemiyorum. Sen elemanından başlık niteliği almak istiyorum. Sadece doğrudan erişebilirsiniz.

Deneyin:

$item->xpath('string(title)')

'Rss / kanal / öğe. Try' (Nokta ile)