8

私は次のようなhtmlを解析しています:

  <table class="linesTbl">
        <tr class="linesHeader">
            <td><h3>EventName</h3></td>
        </tr><tr class="linesColumns">
            <td>Date</td><td class="contestLine">Description</td>
        </tr><tr class="linesAlt1">
            <td>Time</td><td>X1</td><td>Price1</td>
        </tr><tr class="linesAlt1">
            <td>&nbsp;</td><td>X2</td><td>Price2</td></tr>
</table>

このようなテーブルは複数あるので、それらをループしてすべてのデータを取得しようとしています。xpathがphpでクエリを処理する方法がわかりません。現在、各テーブルからEventNameを抽出しようとしています。

$doc = new DOMDocument();
@$doc->loadHTML($html);
$xpath = new DOMXPath($doc);

foreach ($xpath->query("//table[@class = 'linesTbl']") as $tableNode){

  $headerTag = $xpath->query(".//h3", $tableNode);
  echo $headerTag->nodeValue;

}

$ headerTagクエリについても、試しquery("./tr/td/h3", $tableNode)ました。この相対クエリを実行するにはどうすればよいですか?

4

2 に答える 2

15

xpath式はすでに相対的です:

$headerTag = $xpath->query(".//h3", $tableNode);
                            ^       ^^^^^^^^^^
                            |    relative-to node
                       relative path

ただし、これは単一のノードではなくノードリストを返すため、次の場合に実行します。

echo $headerTag->item(0)->nodeValue;
               ^^^^^^^^^

必要な要素にアクセスできます。出力を参照してください。

EventName

これがお役に立てば幸いです。

于 2012-07-15T19:17:12.860 に答える
0

実際、あなたのhtmlは適切ではありません。

XPATHに関しては、この方法でh3タグを特別にターゲットにすることができます。-

/table[@class='linesTbl']/tr[@class='linesHeader']/td/h3
于 2012-07-15T19:20:09.227 に答える