0

xpathとデータの抽出についての私の継続的な物語の中で、私は苦労し続けています。テーブルセルに含まれる値は2つだけです。それぞれに個別にアクセスできますが、そこにいる間はもう一方にアクセスできません。私はそのような細胞を持っています

<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と一致します。。ユニオンと使用について読んだことがあります/td[contains( b, 'PT' ) ]/*[self::a or self::bが、エラーごとにInvalid argument supplied for foreach()

nextSiblingなどを使ってみましたが、エコーすると空白になります。では、どうすればテーブルから2つの値を取得できますか?

4

1 に答える 1

1

あなたが試すことができます

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

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


既存のコードを使用して、2つのクエリが機能するはずです

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 に答える