PHP'nin XPath ile nitelik değerini seçme

2 Cevap php

Ben xpath için yeni ve PHP'nin eski XPath uygulanması ile sıkıntılar içine çalıştırıyorum. O //@url sadece kısaltılmış şeklidir olduğu doğru mudur //attribute::url? Ben test için flickr rss sorgulamak çalışıyorum, ama ayrıntılı bir 0 öğeleri döndürür ise kısaltılmış sorgu, doğru düğümleri bulur:

$xml = file_get_contents('http://api.flickr.com/services/feeds/geo/?format=rss_200');
$doc = new DOMDocument();
$doc->loadXML($xml);
$xpath = new DOMXPath($doc);
$xpath->query('//media:content/@url')->length > 0;
$xpath->query('//media:content/attribute::url')->length == 0;

Ben w3c specs anlamadığı veya bu bir PHP hata mı?

İlgili soru:

Başarılı bir sorgu döndürür DOMAttr objects as expected. But is there no way to get the text value of these nodes directly? Something like //media:content/attribute::url/child::text()? Ben XPath sorguları kullanıcılar tarafından girilmiş olacaktır ve ben (yerine DOM * nesnelerin çok sayıda için kodlama) DOMText nesneler bekliyor olabilir eğer hata algılama çok daha iyi olurdu bir araç için bu gerekir.

2 Cevap

Muhtemelen orada bir hata indi benziyor. Benim için% 100 para cezası görünüyor.

Lütfen ilgili soruya olarak, yazılı bir sonuç döndürmek için denemek için php almak için evaluate yerine sorgu kullanabilirsiniz. başarısız olursa, bu normal nodelist döndürür

Edit:

Have you tried adding a namespace? the media: part might be throwing it for a loop. e.g.

$xpath->registerNamespace('media', "http://search.yahoo.com/mrss/");

Edit 2: just for reference, I also tried this in javascript using the following

function nsResolve() {
    return "http://search.yahoo.com/mrss/"
}

document.evaluate("//media:content/attribute::url",document,nsResolve,XPathResult.ORDERED_NODE_SNAPSHOT_TYPE,null);

ve @ url (şu anda 7 results) kullanarak aynı işleri

//*@url çalışır mı?