Ответ 1
Сделав еще одну охоту, я думаю, что нашел именно то, что искал:
phpQuery - порт jQuery для PHP
Спасибо всем за ваши ответы, я обязательно буду помнить их для других целей.
Мне было любопытно, существует ли интерфейс/библиотека jQuery-стиля для PHP для обработки файлов HTML/XML - особенно с использованием стиля jQuery selectors.
Я хотел бы делать такие вещи (все гипотетические):
foreach (j("div > p > a") as anchor) { // ... } print j("#some_id")->html(); print j("a")->eq(0)->attr("name");
Это всего лишь несколько примеров.
Я сделал столько же, сколько мог, но не смог найти то, что искал. Кто-нибудь знает, существует ли что-то в этих строках, или это то, что мне придется делать с нуля, используя domxml?
Сделав еще одну охоту, я думаю, что нашел именно то, что искал:
phpQuery - порт jQuery для PHP
Спасибо всем за ваши ответы, я обязательно буду помнить их для других целей.
PHP Simple HTML DOM Parser использует селектора стиля jQuery. Примеры из документации:
Изменение элементов 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>
Скребок 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);
Вопрос старый, но вам нужно Query Path.
Поверьте мне, вы ищете xPath. Я показываю вам пример
<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);
}
?>
http://fluentdom.org/ - еще одна альтернатива.
Я написал библиотеку, которая дублирует методы манипуляции JQuery DOM в PHP, но использует xpath, а не селектор стиля jquery. В противном случае он работает почти так же.
[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!");
});
HtmlPageDom расширяет поисковый робот Symfony DOM и добавляет функции манипуляции с DQ-функциями, подобными jQuery.
моя альтернатива https://github.com/gymadarasz/xparser
быстрый и простой в использовании, пример:
$x('#nav a', function($elem) {
$elem->href = '//myurl/' . $elem->href;
});
Лучший, который я нашел, - https://github.com/scotteh/php-dom-wrapper
Он работает так же, как jQuery, и он быстро.
Я попробовал много библиотек из других ответов, но мне не удавалось легко переносить манипуляции, которые я делал в jQuery. С этим это был легкий ветерок. Думаю, это скоро станет популярнее...
simplexml возможно? Его синтаксис отличается от jquery, но он действительно облегчает перемещение XML.
Однако он не будет работать для HTML, который не является допустимым XML.
Вы изучали использование класса PHP DOMDocument?
http://us2.php.net/manual/en/book.dom.php
Не уверен, что это именно то, что вы ищете, но оно позволяет искать документ по различным атрибутам и другие подобные манипуляции с DOM.
Если вы используете современную структуру, вы также должны проверить их.
Эти компоненты могут быть установлены через композитор.