WordPress XML Ayrıştırma, slash: comments sözdizimi?

3 Cevap php

Bu gerçekten sadece bir sözdizimi sorudur.

Ben WordPress yem ayrıştırır ve son mesajları döndüren bir PHP komut dosyası var. Ben de komut yorumların # ayrıştırmak isteyen, ancak yorumların sayısı için WordPress besleme XML nesnesi içinde bir iki nokta üst üste (eğik çizgi: yorum) sahiptir. Bu aşağıdaki hata neden olur:

Parse error: syntax error, unexpected ':' in ... on line ...

Ben şans olmadan aşağıdakilerden her denedim:

$xml->slash:comments

$comments = 'slash:comments'
$xml->$comments

$xml->slash.':'.comments
$xml->{slash:comments}
$xml->{'slash:comments'}

Nasıl bir nokta ile bir nesneyi ayrıştırmak?

3 Cevap

Alternatif olarak, düğümleri erişmek için () XPath'i kullanabilirsiniz. Bir xml dizesi olarak aşağıdakileri göz önüne alındığında:

<entry>
  <id>http://gdata.youtube.com/feeds/api/videos/xyz12345678</id>
  <published>2007-01-17T23:41:00.000Z</published>
  <updated>2010-11-14T03:52:25.000Z</updated>
  <yt:location>Mount Washington Observatory, NH</yt:location>
  <media:group>
    <media:title type='plain'>Example of a Title</media:title>
    <media:duration seconds='126'/>
  </media:group>
</entry>

Bunu yapabilirdi:

$xml = simplexml_load_string(*xmlstring_from_above*);

$location = $xml->xpath('yt:location');
echo($location[0]); // output: "Mount Washington Observatory, NH"

$title = $xml->xpath('media:group/media:title');
echo($title[0]); // output: "Example of a Title"

$duration = $xml->xpath('media:group/media:duration');
echo($duration[0]['seconds']); // output: "126"

Eğer iki nokta üst üste ile düğümlerini almak için, görebileceğiniz gibi, size düğüme göreli bir yol ile () XPath'i kullanabilirsiniz.

PHP bir değişken içinde bir kolon var olamaz. Bu nedenle, bu iki nokta üst üste nasıl işleyeceğini görmek için XML ayrıştırıcı kontrol etmelisiniz.

$string = file_get_contents("http://domain.tld/?feed=rss2");
$string = str_replace('slash:comments','slashcomments',$string);

$xml = simplexml_load_string($string);

Dizeden kolon kaldırmak ve normal olarak işlev simplexml_load_string izin str_replace kullanabilirsiniz.

Örneğin:

$string = file_get_contents("http://domain.tld/?feed=rss2");
$string = str_replace('slash:comments','slashcomments',$string);
$xml = simplexml_load_string($string);
foreach ($xml->channel->item as $val) {
    echo $val->pubDate.'<br />';
    echo $val->title.'<br />';
    echo $val->slashcomments.'<br /><br />';
}

... Yayınlanmış tarihini, başlığını ve bir WordPress yem listelenen mesajların yorumların sayısını dönmelidir. Benim kod daha gelişmiş olduğunu, ancak bu geçici çözümü gösterir.

Yardımlarınız için, Arda Xi teşekkür ederiz!