PHP Dom XPath - 为什么不工作?

时间:2011-12-16 15:13:19

标签: php dom xpath

我整天都在乱用DOM XPath的东西 - 四处阅读并撕掉我的头发!所以,不得已,请问你们 - 专业人士!

我要做的是检索all the titles of threads here中的(在数组中)。

我正在尝试使用XPath(除非有人能告诉我更好的方法);目前我只想获得一个标题来检查我的代码是否正常工作(显然不是!...)

我正在使用:

$list3 = $xpath3
  ->evaluate("//a[contains(@style, 'font-weight:bold') and 
    contains(@href, 'showthread.php?t=3499047')]");

然而,没有任何东西被检索

3 个答案:

答案 0 :(得分:2)

您没有得到任何结果的原因是没有<a>元素满足这两个条件。

这些是@href中包含“3499047”的链接:

<a href="showthread.php?s=9bc55ab5990282a5353fb20d505d577e&amp;t=3499047" id="thread_title_3499047">Tesco misprices and discussion (Thread 12)</a>
<a href="showthread.php?s=9bc55ab5990282a5353fb20d505d577e&amp;t=3499047">1</a>
<a href="showthread.php?s=9bc55ab5990282a5353fb20d505d577e&amp;t=3499047&amp;page=2">2</a>
<a href="showthread.php?s=9bc55ab5990282a5353fb20d505d577e&amp;t=3499047&amp;page=3">3</a>
<a href="showthread.php?s=9bc55ab5990282a5353fb20d505d577e&amp;t=3499047&amp;page=110">Last Page</a>
<a href="member.php?s=9bc55ab5990282a5353fb20d505d577e&amp;find=lastposter&amp;t=3499047" rel="nofollow">ExiledCockney</a>
<a href="misc.php?do=whoposted&amp;t=3499047" onclick="who(3499047); return false;">2,184</a>
<a rel="shadowbox;width=732;height=527;player=iframe;" href="wow.php?t=3499047" target="_blank" style="display: block; width: 100%; height: 100%; cursor: pointer;">
        <div style="width: 100%; height: 100%;  background-image: url('http://images2.moneysavingexpert.com/images/forum_style_2/misc//wow_big_faint_grey.gif');">
            <div style="padding: 12px 0px 0px 0px;">
                <strong>3</strong>
            </div>
        </div>
    </a>

如您所见,它们都没有在样式属性中包含“'font-weight:bold'”。

如果页面上的标记在浏览器中查看时具有所需组合的元素,则可能是通过javascript添加的。 DOM不会运行任何JavaScript,因此您必须检查使用DOM获取的标记。

答案 1 :(得分:0)

确保DOM不会在html上进行barfing。关于格式错误的HTML,它非常挑剔。查看加载页面后->saveHTML()调用立即生成的内容。如果你得到不同/截断的东西,你的输入就会格格不入,必须先清理干净。

答案 2 :(得分:0)

我看了那个html,但是我没有看到任何与href有任何联系的style="font-weight: bold;"。我实际上没有在页面上看到任何粗体链接。无论如何,当我删除这个条件时,我会从evaluate()获得五个DOME元素。