2009-09-01 4 views
27

Ich war neugierig, ob es eine jQuery-style Schnittstelle/Bibliothek für PHP zur Verarbeitung von HTML/XML-Dateien gibt - speziell mit jQuery-Stil selectors.jQuery-ähnliche Schnittstelle für PHP?

Ich möchte solche Dinge tun (alle hypothetischen):

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


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


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

Dies sind nur einige Beispiele.

Ich habe so viel gegoogelt wie ich konnte, konnte aber nicht finden, wonach ich suchte. Weiß jemand, ob etwas in dieser Richtung existiert, oder muss ich das selbst machen, indem ich domxml benutze?

+2

Sie suchen wirklich nach CSS3 und XPATH Stil Selektoren. JQuery und andere JS-Bibliotheken basieren auf diesen standardisierten XML-Selektoren. – bucabay

+0

Die aktuellste jQuery für PHP ist https://github.com/technosophos/querypath – Petah

Antwort

22

etwas mehr Jagd tun, ich denke, ich gerade gefunden habe könnte, was ich Suchen nach:

phpQuery - jQuery port to PHP

Vielen Dank für Ihre Antworten, ich werde sie auf jeden Fall für andere Zwecke im Auge behalten.

+0

Wenn phpQuery Ihre Frage beantwortet, sollten Sie dies als Antwort ankreuzen. – karim79

+0

Ich habe es schon versucht, ich muss 2 Tage warten bis ich meine eigene Antwort scheinbar akzeptieren kann. – theotherlight

+3

Hey, kann ich fragen, wie haben Sie sich zwischen phpQuery und QueryPath entschieden? Ich möchte einen auswählen. – Webinan

0

simplexml vielleicht? Seine Syntax unterscheidet sich von jQuery, aber es macht das Durchqueren von XML wirklich einfach.

Es funktioniert jedoch nicht für HTML, das nicht gültige XML ist.

0

Haben Sie sich mit der DOMDocument-Klasse von PHP befasst?

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

nicht sicher, ob dies ist genau das, was Sie suchen, aber es erlaubt für ein Dokument von verschiedenen Attributen suchen, und andere solche DOM-Manipulation.

30

PHP Simple HTML DOM Parser verwendet jQuery-Stil-Selektoren. Beispiele aus den documentation:

Ändern von HTML-Elementen:

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

Slashdot Scraping:

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

Ich schrieb eine Bibliothek, die jQuery DOM Manipulationsmethoden in PHP dupliziert, aber es verwendet Xpath, nicht die Jquery-Stil-Selektoren. Ansonsten funktioniert es ziemlich ähnlich.

[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

Die Frage ist alt, aber was Sie brauchen, ist Query Path.

+0

Trotz alledem das beste und aktuellste jQuery für PHP! – Petah

+2

Dies ist definitiv eine großartige Lösung und es erfordert nichts zu tun, um die PHP-Installation – Eva

5

Vertrauen Sie mir, dass Sie nach xPath suchen. Ich zeige Ihnen ein Beispiel

<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 erweitert Symfony's DOM Crawler und fügt jQuery-ähnliche DOM-Manipulationsfunktionen hinzu.

+0

Dies macht mehr Sinn, da es eine aktualisierte Komponente zum Lesen des DOM verwendet. – kzap

+0

das funktioniert super –

1

Die beste, die ich gefunden ist https://github.com/scotteh/php-dom-wrapper

Es funktioniert sehr ähnlich wie jQuery, und es ist schnell .

Ich habe viele Bibliotheken aus anderen Antworten versucht, aber ich habe es nicht geschafft, die Manipulationen, die ich in jQuery machte, einfach zu portieren. Mit diesem war es ein Kinderspiel. Ich denke, es wird bald beliebter werden ...