なぜそれらをスタックしないのですか?(壊れやすいコード、チェックを追加)のようなもの:
// first xpath for the outer node-list
$tds = $xpath->query('//*[@id="page-content"]/table/tbody/tr[3]/td');
foreach ($tds as $td)
{
// fetch the included values with a relative xpath to the current node
$nodelist = $xpath->query('./div/a', $td);
...
}
そして実際には、最終的にノード値を照会する必要があるため、その内部ノードリストは必要ありません。ただし、これをここに残して、具象ノードを基準にしたxpathを使用して直接実行できることを示します。
したがって、IDが「page-content」のノード内の任意のテーブルの3番目の内部の任意の内部に最初の <a>
要素が必要な場合は、そのように直接書き込むことができます。これは1つのクエリです。 <div>
<tr>
//*[@id="page-content"]/table/tbody/tr[3]/td/div/a[1]
述語(角かっこ)は、接頭辞が付いたパス内のノードのみを対象としているため、[1]
は、の唯一の場合とa
同様に、最後のノードのみを対象としています。[3]
tr
コード例:
$as = $xpath->query('//*[@id="page-content"]/table/tbody/tr[3]/td/div/a[1]');
foreach ($as as $a)
{
echo $a->nodeValue, "\n";
}
したがって、これにより単一のノードリストとして結果が得られ、2番目のxpathクエリを実行する必要はありません。