Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/xpath/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 警告:DOMXPath::query():表达式无效_Php_Xpath - Fatal编程技术网

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

Php 警告:DOMXPath::query():表达式无效,php,xpath,Php,Xpath,我是Xpath新手。我想循环遍历cURL查询的结果,并打印页面上唯一表的每个元素 我使用了Firefox的Xpath插件来获取我的表达式,我的表的结构如下: <table> <tr class="listItemOneBg"> <td valign="top"> SMITH </td> <td valign="top"> WILLIAM C C </td>

我是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>       
这是一个非标准的XPath表达式。它在DOMXPath.down中无法工作,该表达式在问题发布后已被编辑。干杯

这是学习XPath的地方:

PS:我就是在这里学会的。

这是一个非标准的XPath表达式。它在DOMXPath.down中无法工作,该表达式在问题发布后已被编辑。干杯

这是学习XPath的地方:


附言:我就是在那里学的。

假设你要找的桌子实际上在一个


假设你要找的那张桌子实际上在一个



为什么要在XPath周围加上额外的单引号?x:前缀是怎么回事?我已经更新了代码。至于前缀,我已经使用Xpath插件的输出为我提供了表达式。我的表达式现在可以工作了,尽管我不能循环YetAdditional:HTML片段应该包含元素a div?有这个id。如果你正在强烈地编辑你的问题,并且它已经包含了其他答案,你应该以某种方式将它作为一个注释发布,以避免像@CodeAngry的答案中那样的混乱——或者甚至可以问另一个问题——第一个问题的一个大问题实际上已经解决了。为什么在XPath周围加上额外的单引号?x:前缀是怎么回事?我已经更新了代码。至于前缀,我已经使用Xpath插件的输出为我提供了表达式。我的表达式现在可以工作了,尽管我不能循环YetAdditional:HTML片段应该包含元素a div?具有该id。如果您正在非常强烈地编辑您的问题,并且它已经包含其他答案,您应该以某种方式将其作为注释发布,以避免像@CodeAngry的回答中那样的混淆,或者甚至可以问另一个问题您第一个问题的一个大问题实际上已经解决了。这是一个标准的XPath 1.0及以上表达式,在DOMXPath中完全可以,除了与输入文档不匹配之外。不,它不是非标准的。仅仅因为您在学习XPath时使用的示例中没有它,并不意味着它是非标准的。阅读说明书@MichaelKay Homie,自从我发布这篇文章以来,这个问题已经被彻底编辑过了。我把答案留给了其他需要正确学习XPath的人。当你在聚会上迟到时,不要-1。@JensErat我对MK的评论也会给你。当做很抱歉这是StackOverflow的一个真正弱点,即允许人们改变问题,从而对现有的答案胡说八道。把否决票作为一个信号,告诉未来的读者不要使用这个答案,不要批评给出答案的人。这是一个标准的XPath 1.0和向上的表达式,在DOMXPath中完全可以,除了与输入文档不匹配。不,它不是非标准的。仅仅因为您在学习XPath时使用的示例中没有它,并不意味着它是非标准的。阅读说明书@MichaelKay Homie,自从我发布这篇文章以来,这个问题已经被彻底编辑过了。我把答案留给了其他需要正确学习XPath的人。当你在聚会上迟到时,不要-1。@JensErat我对MK的评论也会给你。当做很抱歉这是StackOverflow的一个真正弱点,即允许人们改变问题,从而对现有的答案胡说八道。把否决票作为一个信号,告诉未来的读者不要利用这个答案,不要批评给出答案的人。祝福你!你帮我节省了几个小时的时间grief@user1801060 +1. 这是一个正确的XPath表达式。这不是我第一次看到你使用的特殊ID“…”。@BannedFrom的表达式是什么?所以请确保实际的HTML源代码有一个标记。您的浏览器的inspector选项卡不是源文档的精确表示,所以PHP代码在浏览器上读取HTML文档时,应该可以工作,我意识到内部可能发生了什么,但我就是这样修复的。包含要提取的目标内容的html标记,放入$your\u dom\u obj\u var->query'//html\u元素[@ATTRIBUTE=VALUE']中,后面没什么。祝福你!你帮我节省了几个小时的时间grief@user1801060 +1. 这是一个正确的XPath表达式。这不是我第一次看到你使用的特殊ID“…”。@BannedFrom的表达式是什么?所以请确保实际的HTML源代码有一个标记。您的浏览器的inspector选项卡不是源文档的精确表示,所以PHP代码在浏览器上读取HTML文档时,应该可以工作,我意识到内部可能发生了什么,但我就是这样修复的。html标记,它将要提取的目标内容封装在$your_dom_obj_var->query'//html_元素[@ATTRIBUTE=VALUE']中,后面没什么。
$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;
}
$tableRows = $xpath->query('//div[@id="divResults"]/table/tbody/tr');
foreach ($tableRows as $row) {
    $cells = $row->getElementsByTagName('td');
}