DomxPath查询不返回节点列表

时间:2017-05-25 15:08:58

标签: php dom xpath

我一直致力于一些涉及xPaths和从其他网站检索元素的练习应用程序。

我使用了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>

它不会返回任何简单的空白。

2 个答案:

答案 0 :(得分:0)

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

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

应该工作

答案 1 :(得分:0)

尝试匹配包含特定值的属性比执行[@style="your search string"]要复杂一点,因为这只会匹配与style完全匹配的your search string属性。

据我所知,xpath中没有简写选择器,类似于CSS中的简写选择器,允许你执行[@style*="your search string"][@style~="your search string"]等。

要测试字符串是否包含其他字符串,请使用contains()函数。你的例子xpath查询必须转换为:

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

请注意匹配隔离字符串,如果愿意,可以在字边界处(例如匹配main中的class="nav main"类,但不匹配class="nav maintenance"中的类mainApp.controller('addUserCtrl', function($scope,$http) { $scope.getCities = function() { $scope.citieslist = ["Nagpur", "Pune", "Latur", "Aurangabad"]; }; }); ),还是会变得有点复杂。我会给你to this answer这样的例子。