2017-05-25 81 views
0

我一直在研究一些涉及xPaths和从其他网站检索元素的实践应用程序。DomxPath查询不返回节点列表

我使用了DomXpath,但它没有返回结果或节点列表。

下面的代码:

$DOM = new DOMDocument(); 
@$DOM->loadHTML($html); 
$xpath = new DOMXPath($DOM); 
$nodes = $xpath->query("//span[contains(@style,'font-size:25px;')]"); 
foreach ($nodes as $node) { 
    echo $node->nodeValue; 
} 

的例子的网页源代码:

<div class="front-view-content full-post"> 
    <p> 
     <span style="font-size:25px; color:#98293D;">RED</span><br> 
     <span style="font-size:25px; color:#98293D;">BLUE</span><br> 
     <span style="font-size:25px; color:#98293D;">WHITE</span></p> 
    </div> 

它不返回任何东西只是一个普通的空白。

回答

0

没有分号;在源代码中,xpath不匹配。

$nodes = $finder->query('//span[@style="font-size:25px"]'); 

应工作

+0

查看更新后的示例并不好用 –

+1

xpath查询中的样式应该与html代码中的样式完全匹配。 –

0

,尝试匹配包含特定值是有点不止做[@style="your search string"]更复杂的属性,完全匹配your search string这只会匹配style属性。

据我所知有XPath中没有速记选择,类似于CSS的实例中的,它允许你做[@style*="your search string"][@style~="your search string"]

要测试一个字符串包含另一个字符串,您使用contains()功能。你比如然后XPath查询都必须转化为:

//span[contains(@style,"font-size:25px;")]

要知道,虽然匹配隔离字符串,在如果你愿意,这个词边界(如class="nav main"main匹配,但例如不在class="nav maintenance"中),仍然会变得更复杂一些。我会参考to this answer这个例子。

+0

它也不工作。我得到一个空白页面的结果。我已经使用了你建议的xpath查询 –

+0

@GerardSantos然后,你应该删除'$ DOM-> loadHTML($ html);'前面的'@',让PHP显示你的实际错误,而不是因为如果你显示的HTML只是一个有效的HTML大页面的片段,它应该工作得很好,因为我刚刚测试过它。如果你不确定如何用'DOMDocument'成功加载可能无效的HTML,我建议你问一个新的问题或者搜索StackOverflow;也许这样的问题已经得到解答。 –