2009-09-01 14 views
27

Ero curioso di sapere se esiste un'interfaccia/libreria in stile jQuery per PHP per la gestione di file HTML/XML, in particolare usando lo stile jQuery selectors.Interfaccia jQuery-like per PHP?

Mi piacerebbe fare cose come questa (tutto ipotetica):

 
foreach (j("div > p > a") as anchor) { 
    // ... 
} 


print j("#some_id")->html(); 


print j("a")->eq(0)->attr("name"); 

Questi sono solo alcuni esempi.

Ho fatto più googlando che potevo ma non riuscivo a trovare quello che stavo cercando. Qualcuno sa se qualcosa di simile esiste, o è qualcosa che dovrò fare io stesso da zero usando domxml?

+2

Sei davvero alla ricerca di selettori di stile CSS3 e XPATH. JQuery e altre librerie JS sono basate su quei selettori XML standardizzati. – bucabay

+0

Il jQuery più aggiornato per PHP è https://github.com/technosophos/querypath – Petah

risposta

22

Facendo un po 'di caccia, penso che potrei aver trovato esattamente quello che ero cercando:

phpQuery - jQuery port to PHP

Grazie a tutti per le vostre risposte, le terremo sicuramente a mente per altri usi.

+0

Se phpQuery risponde alla tua domanda, devi spuntare questa come risposta. – karim79

+0

Ho già provato, ho bisogno di aspettare 2 giorni fino a quando non posso accettare la mia risposta apparentemente. – theotherlight

+3

Ehi, posso chiederti come hai deciso tra phpQuery e QueryPath? Voglio sceglierne uno – Webinan

0

simplexml forse? La sua sintassi è diversa da jQuery, ma rende l'attraversamento di XML davvero facile.

Tuttavia non funzionerà per HTML che non è XML valido.

0

Hai esaminato la classe DOMDocument di PHP?

http://us2.php.net/manual/en/book.dom.php

Non sono sicuro se questo è esattamente quello che stai cercando, ma permette per la ricerca di un documento da vari attributi, e altri come manipolazione del DOM.

30

PHP Simple HTML DOM Parser utilizza selettori di tipo jQuery. Esempi dalle documentation: elementi HTML

Modifica:

// Create DOM from string 
$html = str_get_html('<div id="hello">Hello</div><div id="world">World</div>'); 

$html->find('div', 1)->class = 'bar'; 

$html->find('div[id=hello]', 0)->innertext = 'foo'; 

echo $html; // Output: <div id="hello">foo</div><div id="world" class="bar">World</div> 

Raschiare Slashdot:

// Create DOM from URL 
$html = file_get_html('http://slashdot.org/'); 

// Find all article blocks 
foreach($html->find('div.article') as $article) { 
    $item['title']  = $article->find('div.title', 0)->plaintext; 
    $item['intro'] = $article->find('div.intro', 0)->plaintext; 
    $item['details'] = $article->find('div.details', 0)->plaintext; 
    $articles[] = $item; 
} 

print_r($articles); 
2

Ho scritto una libreria che duplica i metodi di manipolazione DOM di jQuery in PHP, ma utilizza xpath, non i selettori di stile jQuery. Altrimenti, funziona praticamente allo stesso modo.

[http://pxtreme.sourceforge.net] [1]

$doc = px("index.html"); // Create a px Object 
$headings=$doc->xpath("/html/body/h2"); // Select Elements to Manipulate 
$headings->addClass("NewLook"); // Change their Appearance 
px("index.html")->xpath("//h2")->addClass("NewLook"); // All in One Line 

// use anonymous functions in PHP 5.3 
$doc->xpath("//p")->each(function ($pxObject, $index) { 
    $str = $pxObject->get($index)->text(); 
    if (mb_strpos($str, "pxtreme")) 
    $px->attr("title", "Check out this paragraph!"); 
}); 

http://pxtreme.sourceforge.net

12

La domanda è vecchia, ma quello che vi serve è Query Path.

+0

Defiantly il migliore e più aggiornato jQuery per PHP! – Petah

+2

questa è sicuramente un'ottima soluzione e non richiede nulla per l'installazione di PHP – Eva

5

Fidati di me stai cercando xPath. Io vi sto mostrando un esempio

<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> 
<?php 
$dom = new DOMDocument; 
libxml_use_internal_errors(TRUE); 
$dom->loadHTMLFile('http://somewhereinblog.net'); 

libxml_clear_errors(); 

$xPath = new DOMXPath($dom); 
$links = $xPath->query('//h1//a'); //This is xPath. Really nice and better than anything 
foreach($links as $link) { 
    printf("<p><a href='%s'>%s</a></p>\n", $link->getAttribute('href'), $link->nodeValue); 
} 
?> 
2

HtmlPageDom estende il crawler DOM di Symfony e aggiunge funzioni di manipolazione DOM jQuery.

+0

questa ha più senso in quanto utilizza un componente aggiornato per la lettura del DOM. – kzap

+0

funziona alla grande –

1

Il migliore che ho trovato è https://github.com/scotteh/php-dom-wrapper

Funziona molto simile come jQuery, ed è veloce .

Ho provato molte librerie da altre risposte, ma non sono riuscito a portare facilmente le manipolazioni che stavo facendo in jQuery. Con questo è stato un gioco da ragazzi. Immagino che presto diventerà più popolare ...

Problemi correlati