【问题标题】:jQuery-like interface for PHP?PHP 的类似 jQuery 的界面?
【发布时间】:2010-11-24 17:58:21
【问题描述】:

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

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

foreach (j("div > p > a") 作为锚点) { // ... } 打印 j("#some_id")->html(); 打印 j("a")->eq(0)->attr("name");

这些只是几个例子。

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

【问题讨论】:

  • 您确实在寻找 CSS3 和 XPATH 样式选择器。 JQuery 和其他 JS 库都基于那些标准化的 XML 选择器。
  • 最新的 jQuery for PHP 是 github.com/technosophos/querypath

标签: php jquery html xml html-parsing


【解决方案1】:

PHP Simple HTML DOM Parser 使用 jQuery 样式的选择器。来自documentation 的示例:

修改 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);

【讨论】:

    【解决方案2】:

    再打猎,我想我可能已经找到了我正在寻找的东西:

    phpQuery - jQuery port to PHP

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

    【讨论】:

    • 如果 phpQuery 回答了你的问题,你应该勾选这个作为答案。
    • 我已经尝试过了,我需要等待 2 天才能明显接受我自己的答案。
    • 嘿,请问您是如何在 phpQuery 和 QueryPath 之间做出选择的?我想选一个。
    • 旧但它仍然适用于 php 7.3.3。提供的链接中的项目是archived,在Github 有一个稍微旧的repo,它有一些演示语法。
    【解决方案3】:

    这个问题很老,但你需要的是Query Path

    【讨论】:

    • 绝对是最好的,最新的 jQuery for PHP!
    • 这绝对是一个很好的解决方案,它不需要对 PHP 安装做任何事情
    【解决方案4】:

    相信我,您正在寻找 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);
    }
    ?>
    

    【讨论】:

      【解决方案5】:

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

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

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

      【讨论】:

      • 截至 2018-07-05,这是最近更新的插件,也可以通过 composer 获取
      【解决方案6】:

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

      【讨论】:

        【解决方案7】:

        我编写了一个库,它在 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

        【讨论】:

          【解决方案8】:

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

          【讨论】:

          • 这个更有意义,因为它使用更新的组件来读取 DOM。
          【解决方案9】:

          我的选择是https://github.com/gymadarasz/xparser

          快速且易于使用,示例:

          $x('#nav a', function($elem) {
            $elem->href = '//myurl/' . $elem->href;
          });
          

          【讨论】:

            【解决方案10】:

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

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

            【讨论】:

              【解决方案11】:

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

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

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

              【讨论】:

                【解决方案12】:

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

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

                【讨论】:

                  猜你喜欢
                  • 2022-08-19
                  • 2011-09-19
                  • 1970-01-01
                  • 1970-01-01
                  • 1970-01-01
                  • 1970-01-01
                  • 1970-01-01
                  • 1970-01-01
                  • 1970-01-01
                  相关资源
                  最近更新 更多