0

在我持续的 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 以及所有这些,当我回显它时它只是空白。那么,我怎样才能从我的表中获取这两个值呢?

4

1 回答 1

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>";
}
于 2012-07-25T17:23:35.233 回答