如何使用xpath获取数据集

时间:2013-04-25 02:16:40

标签: php dom xpath

我的下面的代码从网站的搜索结果中检索一系列图像,并检索相应的age数据。它工作正常,但我得到一个图像列表,后面是age字段中的信息列表。

img img img img age age age age等等。

如何合并这些内容,以便我可以将它们集合显示:img age img age img age

<?php
    error_reporting(-1);

    $html = new DOMDocument();
    @$html->loadHtmlFile('http://www.site.com/searchresults.html');
    $xpath = new DOMXPath( $html );
    $nodelist = $xpath->query( "//div[@class='age']" );

    $tags = $html->getElementsByTagName('img');

    foreach ($tags as $tag) {

            $image =  $tag->getAttribute('src');
            echo '<img src='. $image .' alt="image" ><br>';
    }


    foreach ($nodelist as $n)
    {
        echo $n->nodeValue."<br>";
    }

?>

示例页面,我想从img中提取title来源<div class="age" title="30 usa">数据:

<div id="sr-15763292" class="search-result">
    <div class="thumb-wrapper">
      <a class="bioLink" href="http://www.site.com/user/"  title="View user"><img src="http://www.site.com/img/15763292.jpg" class="thumb" alt="user" width="140" height="105"></a>

      <p class="status"><a href="http://www.site.com/user/" >Online</a></p>
    </div>

    <div class="rating">
      <div class="rating-stars rating4"></div>
    </div>

    <div class="age" title="30 usa">
     <p>30</p>
     <p class="gender m">m</p>
     <p>USA</p>
    </div>

    <div>
        <p class="headline">Hello there.</p>
    </div>
</div>

1 个答案:

答案 0 :(得分:0)

如果我们不知道HTML是什么样的话,很难回答!假设它看起来像这样

<div class="age"><p>21</p>
    <img src="a.jpg" />
</div>
<div class="age"><p>51</p>
    <img src="b.jpg" />
</div>

你需要找到每个div,然后在每个div中找到图像。即使只有一个结果,getElementsByTagName()也会给你一个列表,所以使用item()获取第一个结果。

error_reporting(-1);

$html = new DOMDocument();
@$html->loadHtmlFile('results.html');
$xpath = new DOMXPath( $html );
$nodelist = $xpath->query( "//div[@class='age']" );

foreach ($nodelist as $node) {
    $tags = $node->getElementsByTagName('img');
    $image =  $tags->item(0)->getAttribute('src');
    echo '<img src="'. $image .'" alt="image" ><br>';
    echo $node->textContent . '<br>';
}

如果HTML是这样的

<div class="age"><p>21</p></div><img src="a.jpg" />

你可以尝试

 $node->nextSibling()

作为HTML的一般点,我想如何从A到B?前进?向后?到父母,到下一个节点再向下......?