当我编写客户端代码时,我使用HTML/CSS/JavaScript和最近的jQuery来加速编码,并使用改进的方法来实现相同的目标.
在我的文本编辑器中,我使用zen-coding来加速代码编写,并避免错误.我暂时将zen-coding视为一个jQuery插件,但它有一个致命的缺陷,你希望在任何javascript开始之前编写HTML并将其发送到客户端.
虽然我们可以使用JavaScript服务器(env.js或node.js),因此使用JavaScript和jQuery做了很多开发服务器端,但我不喜欢移动它,因为它是一种新兴技术,并且有很多不同和缺点(还有一些主要优点).
我想继续使用PHP服务器端,但以我最熟悉的方式开发,熟悉哪个是客户端JavaScript.
因此 - 我一直在研究QueryPath,这是一个jQuery的PHP端口,旨在获取jQuery的最佳和最相关的部分,并重新设计它以适应服务器环境.
这一切都很棒,我现在一直在研究两个能够解析zen编码的PHP类,它们在组合时可以作为一个很好的模板引擎,也可以避免代码中的错误.
我遇到的问题是zen编码解析器都不支持任何接近完整的zen编码功能集.
所以最后我的问题(抱歉相当冗长的介绍)
注意:我正在寻找功能等同而不是句法相似性 - 尽管两者对我来说都是一个加分.
这是一些注释的测试代码,应该阐明我想要实现的目标:
<?php
// first php based zen-coding parser
// http://code.google.com/p/zen-php
require_once 'ZenPHP/ZenPHP.php';
// my own wrapper function
function zp($abbr){ return ZenPHP::expand($abbr); }
// second php based zen-coding parser
// https://github.com/philipwalton/PW_Zen_Coder
require_once 'PW_Zen_Coder/PW_Zen_Coder.php';
$zc = new PW_Zen_Coder;
// my own wrapper function
function pwzc($abbr){ global $zc; return $zc->expand($abbr); }
// php port of jQuery with a new server-side flavor
// http://querypath.org/
require_once 'QueryPath/QueryPath.php';
// …Run Code Online (Sandbox Code Playgroud) 我正在使用QueryPath和PHP.
这可以找到.eventdate,但不会返回.dtstart的任何内容:
$qp = htmlqp($url);
foreach ($qp->find('table#schedule')->find('tr') as $tr){
echo 'date: ';
echo $tr->find('.eventdate')->text();
echo ' time: ';
echo $tr->find('.dtstart')->text();
echo '<br>';
}
Run Code Online (Sandbox Code Playgroud)
如果我交换这两个,.dtstart工作正常,但.eventdate不会返回任何内容.因此,似乎querypath中的find()会破坏元素并仅返回它所需的值,使得迭代超过$ tr无法搜索多个项目.
这是我正在处理的TR的示例HTML:
<tr class="event"><th class="date first" scope="row"><abbr class="eventdate" title="Thursday, February 01, 2011" >02/01</abbr><span class="eventtime" ><abbr class="dtstart" title="2012-02-01T19:00:00" >7:00 PM</abbr><abbr class="dtend" title="2012-02-01T21:00:00" >9:00 PM</abbr></span></th><td class="opponent summary"><ul><li class="first">@ <a class="team" href="/high-schools/ridge-wolves/basketball-winter-11-12/schedule.htm" >Ridge </a> <span class="game-note">*</span></li><li class="location" title="Details: Ridge High School">Details: Ridge High School</li><li class="last"><a class="" href="/local/stats/pregame.aspx?contestid=4255-4c6c-906d&ssid=381d-49f5-9f6d" >Preview Game</a></li></ul></td><td class="result last"><a class="pregame" href="/local/stats/pregame.aspx?contestid=4255-4c6c-906d&ssid=381d-49f5-9f6d">Preview</a></td></tr>
Run Code Online (Sandbox Code Playgroud)
我尝试在第一次找到之前复制$ tr并在第二次找到之前替换它,但这不起作用.
如何在每个$ tr期间搜索某些变量?
仅供参考,超过.eventdate和.dtstart,我也想要.opponent,href在a …
我正在使用QueryPath来操作页面DOM.我正在操作的页面有一些标签,QueryPath不知道如何解释.
我已经尝试将以下内容作为选项传递,但我仍然会收到错误:
ignore_parser_warnings
use_parser(html)
启用这些错误后会出现以下错误:
Warning: DOMDocument::loadHTML() [domdocument.loadhtml]: Tag nobr invalid in Entity
Warning: DOMDocument::loadHTML() [domdocument.loadhtml]: htmlParseEntityRef: expecting ';' in Entity
Warning: DOMDocument::loadHTML() [domdocument.loadhtml]: Tag nobr invalid in Entity
Warning: DOMDocument::loadHTML() [domdocument.loadhtml]: htmlParseEntityRef: expecting ';' in Entity
Warning: DOMDocument::loadHTML() [domdocument.loadhtml]: Tag nobr invalid in Entity
Warning: DOMDocument::loadHTML() [domdocument.loadhtml]: htmlParseEntityRef: expecting ';' in Entity
任何帮助将不胜感激.