PHP Dom XPath->评估

时间:2011-12-15 21:49:18

标签: php dom xpath

所有专业人士的快速问题。我试图在此页http://forums.moneysavingexpert.com/forumdisplay.php?f=36

屏幕上删除线程标题

我正在使用DOMXPath,查看上面页面的源代码,标题包含在以下代码中:

<a href="showthread.php?t=...number representing thread..."
   id="thread_title_...number representing thread..." 
   style="font-weight:bold">TITLE OF THREAD</a>

我从这段代码开始:

$list3 = $xpath3
  ->evaluate("//a[contains(@style, 'font-weight:bold')]");

但是,有多个<a style="font-weight:bold">。我的问题是:你能合并contains吗?例如,包含@style@href

如果是这样,你怎么能用上面的href来做,它的数字根据它的线程而变化?你能做[0-9]型的东西吗?

我很感激我能得到任何帮助!

2 个答案:

答案 0 :(得分:1)

使用以下表达式获取href包含showthread.php?t=2的链接:

//a[contains(@style, 'font-weight:bold') and 
    contains(@href, 'showthread.php?t=2')]

如果您想获得任何这些链接(无论t=<n>中的数字如何),请使用以下表达式:

//a[contains(@style, 'font-weight:bold') and 
    contains(translate(@href, '0123456789', ''), 'showthread.php?t=', )]

请注意,如果这些字符串始终显示在starts-with的开头,您也可以使用href

答案 1 :(得分:0)

我认为你可以做组合,但在你的情况下,我认为获得每个tr的第3个t并获得里面的标题会更简单。再次,不要依赖于风格,它不是很语义。

您需要学习xpath,例如,您可以在w3schools学习它。此外,如果您使用firebug,您可以右键单击html选项卡中的任何元素并获取其xpath。以下是我获得的第一个标题://*[@id="td_threadtitle_3499047"] ...不太好。

对于线程表,我得到了这个://*[@id="threadslist"] ...这样更好,没有数字。

现在让我们获得第3个td://*[@id="threadslist"]//td[3]

现在是第二个链接,必须与标题相对应://*[@id="threadslist"]//td[3]/div/a[2]。得到它?也许我错了,但我希望你有这个主意......

依靠这个位置也不是很语义,但你似乎没有太多的选择......