2012-07-25 118 views
0

在我繼續傳奇的xpath和提取數據的過程中,我繼續奮鬥。我只需要包含在表格單元格中的兩個值。我可以單獨獲得每個人,但在那裏我無法訪問其他人。我有細胞的,像這樣xpath和提取多個值

<TR> 
<TD width="120" align="center" valign="top"> 
<A href="http://www..yadayada.com"> <!--the href I need to extract--> 
<IMG src="http://images.com/items/yada.gif" width="80" height="80" border="1"></A> 
<BR> 
<B>Random number PT</B><!--the text I need to extract--> 
</TD> 

我遍歷像這樣:

@$dom = new DOMDocument(); 
@$dom->loadHTML($rawPage); 
@$xpath = new DOMXPath($dom); 
@$queryResult = $xpath->query("..../tr/td[contains(b, 'PT') ]/b"); 

去的HREF鏈接和與之相似,

@$queryResult = $xpath->query("..../tr/td[contains(b, 'PT') ]/a"); 

得到我所需要的文本。然後我提取像這樣

//for the text in b 
foreach ($queryResult as $result) 
{ 
echo $result->textContent . " text content<br>"; 
} 

和鏈接

//for the text in href 
foreach ($queryResult as $result) 
{ 
echo $result->getAttribute('href') . " href<br>"; 
} 

我不拉表中的每個TD,這就是爲什麼我匹配/td[contains(b, 'PT') ]那些有PT在。我已閱讀有關工會和使用/td[contains(b, 'PT') ]/*[self::a or self::b,但我的每個錯誤與Invalid argument supplied for foreach()

我試過使用nextSibling和所有這一切,它只是空白,當我回聲它。那麼,我怎樣才能從我的表格中獲得這兩個值呢?

+0

在'.../TR/TD [包含(b,'PT')]/b'什麼是'PT'?你的html沒有任何字詞「PT」。 – 2012-07-25 16:36:18

+0

@VamanKulkarni,我在我的文章中糾正了這一點。 – KiloJKilo 2012-07-25 16:46:27

回答

1

您可以嘗試

//td[contains(b, 'PT') ] 

而且

//td[contains(b, 'PT') ]/a 

兩個查詢應該工作,
使用現有的代碼

queryResult = $xpath->query("//td[contains(b, 'PT') ]"); 
foreach ($queryResult as $result) 
{ 
    echo $result->textContent . " text content<br>"; 
} 

$queryResult = $xpath->query("//td[contains(b, 'PT') ]/a"); 
foreach ($queryResult as $result) 
{ 
    echo $result->getAttribute('href') . " href<br>"; 
} 
+0

我已經這樣做了,作爲單個xpath查詢的一部分,但是,我不知道如何實現這一點。我寫兩個單獨的xpath查詢? – KiloJKilo 2012-07-25 17:33:22

+0

你描述它的方式,它會發布b和一個單獨的。我只是將href循環移到第一個循環中,以便將匹配的href與相應的b一起發佈。謝謝 – KiloJKilo 2012-07-25 18:03:45