<td><nobr>10-05-2009</nobr><br>06:10<br>17:35 -1</td>
日期很简单,因为它包含在nobr标签中,所以例如。 $element[':first-child']->text()
可以解决问题。 但是如何在第二段文字上获得我的肮脏手套?
CSS仅适用于元素,因此nth-child(2),(3)
会返回周围的<br>
标记,而不是文本。
如果我可以XPath它,.//text()
中的第二个节点将是黄金。但显然在phpQuery-land中,$element->xpath->query('.//text()')
的上下文是文档根,所以我在整个文档中得到每一段文本!
想法? How do I select text nodes with jQuery?中的所有解决方案似乎都涉及Javascript DOM操作,这些操作远比PHP糟糕的DOM API差。也许只是将整个元素转储到字符串并在<br>
上展开它是可行的方法......
答案 0 :(得分:3)
来自http://php.net/manual/en/domxpath.query.php
DOMNodeList DOMXPath :: query ( string $ expression [,DOMNode $ contextnode [,boolean $ registerNodeNS = true ]])
因此,这应该与td
一起用作上下文节点:
$element->xpath->query('text()[1]',$element)
答案 1 :(得分:0)
您是否尝试过迭代$element[':first-child']->siblings()
的文本方法?这应该可以让你访问他们的所有文本,不是吗?
答案 2 :(得分:0)
以Alejandro的答案为基础,我提出了这个小功能:
function nth_text($element, $n) {
$xpath = new DOMXPath($element->ownerDocument);
return $xpath->query('.//text()', $element)->item($n)->textContent;
}
顺便说一句,这是纯PHP DOM,不需要phpQuery(或允许,参数必须是DOMNode或DOMElement)。现在最初的问题很简单:
$src_date = nth_text($element, 0);
$src_time = nth_text($element, 1);
耶!