警告:DOMXPath :: query():表达式无效

时间:2013-10-06 11:11:27

标签: php xpath

我是一个Xpath新手。我想循环遍历cURL查询的结果并打印页面上唯一表的每个元素。

我已经使用Firefox的Xpath插件来获取我的表达式,我的表格结构如下:

<table>
<tr class="listItemOneBg">
    <td valign="top">
        SMITH
    </td>
    <td valign="top">
        WILLIAM C C
    </td>
    <td valign="top">
        Male
    </td>
    <td valign="top">

    </td>
    <td valign="top">

    </td>
    <td valign="top">

    </td>
    <td valign="top">

    </td>
    <td valign="top">
        BLACKWOOD
    </td>
    <td valign="top">
        61
    </td>
    <td valign="top">
        1924
    </td>
    <td valign="top">
        <a target="_blank" href='XXX'>
            order</a>
    </td>
</tr>

<tr class="listItemTwoBg">
    <td valign="top">
        SMITH
    </td>
    <td valign="top">
        WILLIAM C PAGE-
    </td>
    <td valign="top">
        Male
    </td>
    <td valign="top">

    </td>
    <td valign="top">

    </td>
    <td valign="top">

    </td>
    <td valign="top">

    </td>
    <td valign="top">
        SWAN
    </td>
    <td valign="top">
        9
    </td>
    <td valign="top">
        1914
    </td>
    <td valign="top">
        <a target="_blank" href='XXY'>
            order</a>
    </td>
</tr>       

这是我到目前为止尝试过的代码。我收到一条消息“警告:为foreach()提供的参数无效”。我做错了什么?

$page = curl_exec($ch);
curl_close($ch);

// Create new PHP DOM document
$dom = new DOMDocument;
// Load html from curl request into document model
@$dom->loadHTML($page);
$xpath = new DOMXPath($dom);

$tableRows = $xpath->query("id('divResults')/table/tbody/tr");
foreach ($tableRows as $row) {
     // fetch all 'tds' inside this 'tr'
    $td = $xpath->query('td', $row);
    echo $td->item(1)->textContent;
}

2 个答案:

答案 0 :(得分:3)

假设你所追求的表实际上是<div id="divResults"> ...

$tableRows = $xpath->query('//div[@id="divResults"]/table/tbody/tr');
foreach ($tableRows as $row) {
    $cells = $row->getElementsByTagName('td');
}

答案 1 :(得分:1)

这是一个非标准的XPath表达式。它无法在DOMXPath中运行。
(Downvoters,表达式已被编辑自问题发布以来。干杯!)

这是您了解XPath

的地方

PS 这是我学习它的地方。