2009-09-01 22 views
27

Byłem ciekawy, czy istnieje interfejs lub biblioteka w stylu jQuery dla PHP do obsługi plików HTML/XML - w szczególności przy użyciu stylu jQuery selectors.Interfejs jQuery-like dla PHP?

chciałbym robić rzeczy tak (wszystkie hipotetyczne):

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


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


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

Są to tylko kilka przykładów.

Zrobiłem tak dużo Google, jak mogłem, ale nie mogłem znaleźć tego, czego szukałem. Czy ktoś wie, czy istnieje coś podobnego, czy też jest to coś, co sam będę musiał tworzyć od zera przy użyciu domxml?

+2

Naprawdę szukasz selektorów stylu CSS3 i XPATH. JQuery i inne biblioteki JS oparte są na tych standardowych selektorach XML. – bucabay

+0

Najbardziej aktualnym jQuery dla PHP jest https://github.com/technosophos/querypath – Petah

Odpowiedz

22

Robi trochę więcej polowanie, myślę, że może znalazłem dokładnie to, co było poszukuje:

phpQuery - jQuery port to PHP

Dziękuję wszystkim za odpowiedzi, na pewno będę ich pamiętać o innych zastosowaniach.

+0

Jeśli phpQuery odpowie na twoje pytanie, powinieneś zaznaczyć to jako odpowiedź. – karim79

+0

Już próbowałem, muszę poczekać 2 dni, aż będę mógł przyjąć moją własną odpowiedź najwyraźniej. – theotherlight

+3

Hej, mogę zapytać, jak zdecydowałeś się między phpQuery a QueryPath? Chcę wybrać jeden. – Webinan

0

simplexml być może? Jego składnia różni się od jquery, ale sprawia, że ​​przechodzenie XML jest naprawdę łatwe.

Nie będzie jednak działać dla HTML, który nie jest prawidłowym kodem XML.

0

Czy zapoznałeś się z wykorzystaniem klasy DOMDocument w PHP?

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

Nie wiem, czy to jest dokładnie to, czego szukasz, ale nie pozwala na wyszukiwanie dokumentów według różnych atrybutów i inne takie manipulacje DOM.

30

PHP Simple HTML DOM Parser używa selektorów stylu jQuery. Przykłady z documentation:

Modyfikowanie elementów 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> 

Skrobanie 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

Napisałem bibliotekę, która powiela metody manipulacji DOM jQuery w PHP, ale używa xpath, a nie selektorów stylu jquery. W przeciwnym razie działa prawie tak samo.

[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

Pytanie jest stary, ale to, czego potrzebujesz to Query Path.

+0

Zdecydowanie najlepszy i najbardziej aktualny jQuery dla PHP! – Petah

+2

jest to z pewnością świetne rozwiązanie i nie wymaga niczego, co można zrobić przy instalacji PHP – Eva

5

Zaufaj mi, że szukasz xPath. Wyświetlam przykład:

<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

rozszerza robot indeksujący Symfony i dodaje funkcje manipulacji DOM podobne do jQuery.

+0

, ten ma więcej sensu, ponieważ wykorzystuje zaktualizowany komponent do czytania DOM. – kzap

+0

to działa świetnie –

1

Najlepszym jeden znalazłem jest https://github.com/scotteh/php-dom-wrapper

To działa bardzo podobnie jak jQuery, i to szybko .

Próbowałem wielu bibliotek z innych odpowiedzi, ale nie udało mi się łatwo przenieść manipulacji, które robiłem w jQuery. Z tym był to wietrzyk. Myślę, że wkrótce stanie się bardziej popularny ...

Powiązane problemy