31

我很好奇是否存在用于处理 HTML/XML 文件的 jQuery 样式的 PHP 界面/库 - 特别是使用 jQuery 样式选择器

我想做这样的事情(所有假设):

foreach (j("div > p > a") 作为锚点) {
   // ...
}


打印 j("#some_id")->html();


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

这些只是几个例子。

我做了尽可能多的谷歌搜索,但找不到我要找的东西。有谁知道是否存在这些方面的东西,或者这是我必须自己使用 domxml 从头开始​​制作的东西?

4

12 回答 12

37

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>

刮刀点:

// 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);
于 2009-09-01T19:38:02.720 回答
25

做更多的狩猎,我想我可能已经找到了我正在寻找的东西:

phpQuery - 到 PHP 的 jQuery 端口

感谢大家的回答,我一定会记住它们以用于其他用途。

于 2009-09-01T19:46:22.407 回答
11

问题很老,但您需要的是Query Path

于 2011-10-10T23:17:16.087 回答
5

相信我,您正在寻找 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);
}
?>
于 2012-10-05T20:08:09.810 回答
4

我找到的最好的一个是https://github.com/scotteh/php-dom-wrapper

它的工作方式与 jQuery 非常相似,而且速度很快。

我从其他答案中尝试了许多库,但我没有设法轻松地移植我在 jQuery 中所做的操作。有了这个就轻而易举了。我想它很快就会变得更受欢迎......

于 2017-04-04T15:11:08.567 回答
2

http://fluentdom.org/是另一种选择。

于 2009-09-01T22:00:01.297 回答
2

我编写了一个库,它在 PHP 中复制 jQuery 的 DOM 操作方法,但它使用 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!");
});

http://pxtreme.sourceforge.net

于 2010-11-21T15:58:05.107 回答
2

HtmlPageDom扩展了 Symfony 的 DOM Crawler 并添加了类似 jQuery 的 DOM 操作函数。

于 2014-12-10T11:25:46.920 回答
1

我的替代方案是https://github.com/gymadarasz/xparser

快速且易于使用,例如:

$x('#nav a', function($elem) {
  $elem->href = '//myurl/' . $elem->href;
});
于 2016-01-03T00:53:18.743 回答
0

simplexml也许?它的语法与 jquery 不同,但它确实使遍历 XML 变得非常容易。

但是,它不适用于不是有效 XML 的 HTML。

于 2009-09-01T19:14:26.513 回答
0

您是否考虑过使用 PHP 的 DOMDocument 类?

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

不确定这是否正是您要查找的内容,但它确实允许通过各种属性和其他此类 DOM 操作来搜索文档。

于 2009-09-01T19:16:30.830 回答
0

如果您使用现代框架,您也应该检查这些。

这些组件可以通过 composer 安装。

于 2013-11-29T08:59:49.973 回答