2009-09-01 4 views
27

J'étais curieux de savoir s'il existait ou non une interface/bibliothèque de style jQuery pour PHP pour gérer les fichiers HTML/XML - en particulier en utilisant le style jQuery selectors.Interface jQuery-like pour PHP?

Je voudrais faire des choses comme ça (hypothétique):

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


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


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

Ce ne sont que quelques exemples. J'ai fait autant de recherches que j'ai pu mais je n'ai pas trouvé ce que je cherchais. Est-ce que quelqu'un sait si quelque chose de ce genre existe, ou est-ce quelque chose que je vais devoir faire à partir de zéro moi-même en utilisant domxml?

+2

Vous recherchez vraiment des sélecteurs de style CSS3 et XPATH. JQuery et d'autres bibliothèques JS sont basées sur ces sélecteurs XML standardisés. – bucabay

+0

Le plus récent jQuery pour PHP est https://github.com/technosophos/querypath – Petah

Répondre

22

Faire un peu plus la chasse, je pense que je l'ai trouvé exactement ce que je À la recherche de:

phpQuery - jQuery port to PHP

Merci à tous pour vos réponses, je vais certainement les garder à l'esprit pour d'autres utilisations.

+0

Si phpQuery répond à votre question, vous devez cocher ceci comme réponse. – karim79

+0

J'ai déjà essayé, j'ai besoin d'attendre 2 jours jusqu'à ce que je puisse accepter ma propre réponse apparemment. – theotherlight

+3

Hey je peux demander comment avez-vous décidé entre phpQuery et QueryPath? Je veux en choisir un. – Webinan

0

simplexml peut-être? Sa syntaxe est différente de celle de jquery, mais elle facilite vraiment le déplacement de XML.

Il ne fonctionnera cependant pas pour le HTML qui n'est pas valide XML.

0

Avez-vous envisagé d'utiliser la classe DOMDocument de PHP?

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

Je ne sais pas si cela est exactement ce que vous cherchez, mais il ne permet de rechercher un document par divers attributs, et d'autres manipulations DOM.

30

PHP Simple HTML DOM Parser utilise des sélecteurs de type jQuery. Des exemples des documentation:

Modification des éléments HTML:

// 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> 

Grattage 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

J'ai écrit une bibliothèque qui reproduit les méthodes de manipulation DOM de jQuery en PHP, mais elle utilise xpath, pas les sélecteurs de style jquery. Sinon, cela fonctionne à peu près pareil.

[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 question est vieux, mais ce que vous avez besoin est Query Path.

+0

Defiantly le meilleur, et le plus à jour jQuery pour PHP! – Petah

+2

ceci est certainement une excellente solution et il ne nécessite rien à faire à l'installation PHP – Eva

5

Faites-moi confiance que vous êtes à la recherche de xPath. Je vous montre un exemple

<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 étend le Crawler DOM de Symfony et ajoute des fonctions de manipulation DOM de type jQuery.

+0

celui-ci a plus de sens car il utilise un composant mis à jour pour lire le DOM. – kzap

+0

cela fonctionne très bien –

1

Le meilleur que je trouve est https://github.com/scotteh/php-dom-wrapper

Il fonctionne de manière similaire que jQuery, et il est rapide .

J'ai essayé de nombreuses bibliothèques à partir d'autres réponses, mais je n'ai pas réussi à porter facilement les manipulations que je faisais dans jQuery. Avec celui-ci c'était un jeu d'enfant. Je suppose qu'il deviendra plus populaire bientôt ...