w3school - php samples
¿Interfaz jQuery para PHP? (12)
¿Has estudiado el uso de la clase DOMDocument de PHP?
http://us2.php.net/manual/en/book.dom.php
No estoy seguro de si esto es exactamente lo que está buscando, pero permite buscar un documento por varios atributos y otra manipulación de DOM similar.
Tenía curiosidad por saber si existe o no una interfaz / biblioteca de estilo jQuery para PHP para manejar archivos HTML / XML, específicamente utilizando selectors estilo jQuery.
Me gustaría hacer cosas como esta (todas hipotéticas):
foreach (j("div > p > a") as anchor) { // ... } print j("#some_id")->html(); print j("a")->eq(0)->attr("name");
Estos son solo algunos ejemplos.
Hice tanto Google como pude pero no pude encontrar lo que estaba buscando. ¿Alguien sabe si existe algo en este sentido o es algo que tendré que hacer desde cero utilizando domxml?
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);
}
?>
El mejor que encontré es https://github.com/scotteh/php-dom-wrapper
Funciona de manera muy similar a jQuery, y es rápido.
Probé muchas bibliotecas a partir de otras respuestas, pero no logré portar las manipulaciones que estaba haciendo en jQuery fácilmente. Con este fue una brisa. Supongo que pronto será más popular ...
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!");
});
Haciendo un poco más de caza, creo que podría haber encontrado precisamente lo que estaba buscando:
phpQuery - jQuery puerto a PHP
Gracias a todos por sus respuestas, definitivamente los tendré en cuenta para otros usos.
La pregunta es antigua pero lo que necesitas es Query Path .
Si usas un marco moderno, deberías revisarlos también.
- http://symfony.com/doc/current/components/dom_crawler.html
- http://symfony.com/doc/current/components/css_selector.html
Estos componentes se pueden instalar a través del compositor.
mi alternativa es https://github.com/gymadarasz/xparser
Rápido y fácil de usar, un ejemplo:
$x(''#nav a'', function($elem) {
$elem->href = ''//myurl/'' . $elem->href;
});
http://fluentdom.org/ es otra alternativa.
PHP Simple HTML DOM Parser utiliza selectores estilo jQuery. Ejemplos de la documentación :
Modificar elementos 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>
Scraping 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);
simplexml quizás? Su sintaxis es diferente de jquery, pero hace que el desplazamiento de XML sea realmente fácil.
Sin embargo, no funcionará para HTML que no sea XML válido.
HtmlPageDom extiende el rastreador de DOM de Symfony y agrega funciones de manipulación de DOM similares a jQuery.