用于解析html标记的xpath查询

时间:2010-09-28 07:16:17

标签: dom xpath html-parsing

我需要使用xpath查询解析以下示例html。

<td id="msgcontents">
 <div class="user-data">Just seeing if I can post a link... please ignore post
  <a href="http://finance.yahoo.com">http://finance.yahoo.com</a>
 </div>
</td>

<td id="msgcontents">
 <div class="user-data">some text2...
  <a href="http://abc.com">http://abc.com</a>
 </div>
</td>

<td id="msgcontents">
 <div class="user-data">some text3...      
 </div>
</td>

上面的html可能会在页面中重复n次。

有时.....部分可能不存在,如上面的html块所示。

我需要的是xpath语法,以便我可以将解析后的字符串作为

 array1[0]= "Just seeing if I can post a link... please ignore post ttp://finance.yahoo.com" 
 array[1]="some text2 htp://abc.com"
 array[2]="sometext3" 

2 个答案:

答案 0 :(得分:0)

可能类似以下内容:

   $remote = file_get_contents('http://www.sitename.com');
    $dom = new DOMDocument();
    //Error suppression unfortunately, as an invalid xhtml document throws up warnings.
    $file = @$dom->loadHTML($remote);

    $xpath = new DOMXpath($dom);

    //Get all data with the user-data class.
    $userdata = $xpath->query('//*[contains(@class, \'user-data\')]');

    //get links
    $links = $xpath->query('//a/@href');

因此,要访问其中一个变量,您需要使用nodeValue

$ret = array();
foreach($userdata as $data) {
  $ret[] = $data->nodeValue;
}

编辑:我想我会提到这会在给定页面上显示所有链接,我认为这是你想要的吗?

答案 1 :(得分:0)

使用

concat(/td/div/text[1], ' ', /td/div/a)

您可以在两个字符串之间使用,而不是上面的',无论您想要的分隔符