douxian7534 2017-11-01 14:35
浏览 60
已采纳

迭代通过xpath求值返回

How is correct wayt to interate all elements return by xpath->evaluate?

i have that structure:

<?
$html = '
<div class="xGh" style="background-image: url(\'name_file0.jpg\');"></div>
<div class="xGh" style="background-image: url(\'name_file1.jpg\');"></div>
<div class="xGh" style="background-image: url(\'name_file2.jpg\');"></div>
<div class="xGh" style="background-image: url(\'name_file3.jpg\');"></div>
';

libxml_use_internal_errors(true);
$dom = new domDocument('1.0', 'utf-8'); 
$dom->loadHTML($html); 
$dom->preserveWhiteSpace = false; 
$xpath = new DOMXPath($dom);

$img = $xpath->evaluate('substring-before(substring-after(//div[@class=\'xGh\']/@style, "background-image: url(\'"), "\')")');    

echo $img;//name_file0.jpg

edit

With that loop in can iterate my object, but not correct result:

<?
$html = '
<div class="xGh" style="background-image: url(\'name_file0.jpg\');"></div>
<div class="xGh" style="background-image: url(\'name_file1.jpg\');"></div>
<div class="xGh" style="background-image: url(\'name_file2.jpg\');"></div>
<div class="xGh" style="background-image: url(\'name_file3.jpg\');"></div>
';

libxml_use_internal_errors(true);
$dom = new domDocument('1.0', 'utf-8'); 
$dom->loadHTML($html); 
$dom->preserveWhiteSpace = false; 
$xpath = new DOMXPath($dom);

$items = $xpath->query('//div[@class="xGh"]');
for($i = 0; $i < $items->length; $i++)
{   $ci = $xpath->evaluate("substring-before(substring-after(//*[@class=\"xGh\"]/@style, \"background-image: url('\"), \"')\")");
echo $ci;
}//name_file0.jpgname_file0.jpgname_file0.jpgname_file0.jpg

The output needed is :

name_file0.jpgname_file1.jpgname_file2.jpgname_file3.jpg

Where is the correct place to put one count iterator in that loop, to give sequence files not the same?

How iterate to return others?

  • 写回答

2条回答 默认 最新

  • dtkjthe4025 2017-11-01 16:25
    关注

    Let's try this:

    <?php
    
    $html = '
    <div class="xGh" style="background-image: url(\'name_file0.jpg\');"></div>
    <div class="xGh" style="background-image: url(\'name_file1.jpg\');"></div>
    <div class="xGh" style="background-image: url(\'name_file2.jpg\');"></div>
    <div class="xGh" style="background-image: url(\'name_file3.jpg\');"></div>
    ';
    
    libxml_use_internal_errors(true);
    $dom = new DOMDocument('1.0', 'utf-8');
    $dom->loadHTML($html);
    $dom->preserveWhiteSpace = false;
    $xpath = new DOMXPath($dom);
    
    $divs = $xpath->query('//div[@class=\'xGh\']/@style');
    
    /* @var DOMAttr $div */
    foreach ($divs as $div) {
        preg_match("/url\('(.*)'\)/", $div->nodeValue, $matches);
    
        if (!isset($matches[1])) {
            continue;
        }
        $url = $matches[1];
    
        // name_file0.jpg, ...
        echo $url . "
    ";
    }
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

悬赏问题

  • ¥15 微信会员卡等级和折扣规则
  • ¥15 微信公众平台自制会员卡可以通过收款码收款码收款进行自动积分吗
  • ¥15 随身WiFi网络灯亮但是没有网络,如何解决?
  • ¥15 gdf格式的脑电数据如何处理matlab
  • ¥20 重新写的代码替换了之后运行hbuliderx就这样了
  • ¥100 监控抖音用户作品更新可以微信公众号提醒
  • ¥15 UE5 如何可以不渲染HDRIBackdrop背景
  • ¥70 2048小游戏毕设项目
  • ¥20 mysql架构,按照姓名分表
  • ¥15 MATLAB实现区间[a,b]上的Gauss-Legendre积分