2009-09-01 7 views
27

Tenía curiosidad sobre si existe o no una interfaz/biblioteca jQuery-style para PHP para manejar archivos HTML/XML, específicamente usando el estilo jQuery selectors.jQuery como interfaz para PHP?

me gustaría hacer cosas como esta (hipotético):

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


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


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

Estos son sólo algunos ejemplos.

Hice tanto Google como pude pero no pude encontrar lo que estaba buscando. ¿Alguien sabe si existe algo parecido a esto, o es algo que voy a tener que hacer desde cero usando Domxml?

+2

Realmente está buscando los selectores de estilo CSS3 y XPATH. JQuery y otras bibliotecas JS se basan en esos selectores XML estandarizados. – bucabay

+0

La versión más actualizada de jQuery para PHP es https://github.com/technosophos/querypath – Petah

Respuesta

22

Haciendo un poco más la caza, creo que podría he encontrado precisamente lo que estaba buscando:

phpQuery - jQuery port to PHP

Gracias a todos por sus respuestas, definitivamente los tendré en cuenta para otros usos.

+0

Si phpQuery responde a su pregunta, debe marcarla como la respuesta. – karim79

+0

Ya lo intenté, necesito esperar 2 días hasta que pueda aceptar mi propia respuesta aparentemente. – theotherlight

+3

Hola, ¿puedo preguntar cómo decidiste entre phpQuery y QueryPath? Quiero elegir uno. – Webinan

0

simplexml ¿quizás? Su sintaxis es diferente de jquery, pero hace que atravesar XML sea realmente fácil.

Sin embargo, no funcionará para HTML que no sea XML válido.

0

¿Has estudiado el uso de la clase DOMDocument de PHP?

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

No estoy seguro si esto es exactamente lo que está buscando, pero sí permite para buscar un documento por diversos atributos, y otra tal manipulación DOM.

30

PHP Simple HTML DOM Parser utiliza los selectores de estilo jQuery. Ejemplos de los documentation: elementos HTML

Modificación:

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

Raspar 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

Escribí una biblioteca que duplica los métodos de manipulación DOM de jQuery en PHP, pero utiliza xpath, no los selectores de estilo jquery. De lo contrario, funciona más o menos de la misma manera.

[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 pregunta es viejo, pero lo que necesita es Query Path.

+0

¡Definitivamente el mejor y más actualizado jQuery para PHP! – Petah

+2

esta es definitivamente una gran solución y no requiere nada para hacer la instalación de PHP – Eva

5

Créeme que estás buscando xPath. Te estoy mostrando un ejemplo

<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 amplía Symfony's DOM Crawler y agrega funciones de manipulación DOM similares a jQuery.

+0

, esta tiene más sentido ya que utiliza un componente actualizado para leer el DOM. – kzap

+0

esto funciona muy bien –

1

El mejor que he encontrado es https://github.com/scotteh/php-dom-wrapper

funciona de manera muy similar como jQuery, y es rápido .

Probé muchas bibliotecas con otras respuestas, pero no logré trasladar las manipulaciones que estaba haciendo en jQuery fácilmente. Con este fue una brisa. Supongo que se volverá más popular pronto ...

Cuestiones relacionadas