我正在解析看起来像这样的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> </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)
。我该怎么做这个相对查询?
答案 0 :(得分:11)
您的xpath表达式已经相对:
$headerTag = $xpath->query(".//h3", $tableNode);
^ ^^^^^^^^^^
| relative-to node
relative path
但是,这会返回一个节点列表,而不是单个节点,所以如果你这样做:
echo $headerTag->item(0)->nodeValue;
^^^^^^^^^
您可以访问所需的元素,请参阅输出:
EventName
我希望这有用。
答案 1 :(得分:0)
实际上,你的HTML不合适。
关于XPATH,您可以通过这种方式专门定位到h3
标记: -
/table[@class='linesTbl']/tr[@class='linesHeader']/td/h3