短いバージョン: 少なくとも直接ではありません。XMLReader を使用して構文解析アルゴリズムにコンテキストをコーディングするのは、プログラマ次第です。
詳細バージョン: PHP の XMLReader は、プル パーサーと呼ばれるものです。プル パーサーは、テキスト ストリームを処理できるという点で、ツリー/DOM ベースのパーサーとは異なります。つまり、ドキュメント全体を取得する前に、ドキュメントの解析を開始できます。これは、何かを行う前にドキュメント全体をメモリにロードする必要がある SimpleXML や DOMDocument などのツリー ベース/DOM パーサーとは異なります。
利点は、75MB の XML ファイルがある場合、それを処理するために 75MB の空き RAM を必要としないことです (ツリー ベースのパーサーの場合のように)。トレードオフは、プル パーサーがドキュメント全体のコンテキストを保持しないことです。現時点でたまたま処理しているノードのコンテキストしかありません。
これを別の方法で考えると、ツリー/DOM ベースのパーサーは、ドキュメントのすべての部分を把握する必要があります。しかし、あなたとプル パーサーは異なる取り決めを行いました。それはあなたにノードを投げ続け、その内容を処理するためにあなたに任せます。
これは、(うまくいけば)あなたが求めているものに近いコードの例です。
$xml = new XMLReader();
$xml->open('example.xml');
$last_node_at_depth = array();
while($xml->read())
{
//stash the XML of the entire node in an array indexed by depth
//you're probably better off stashing exactly what you need from
$last_node_at_depth[$xml->depth] = $xml->readOuterXML();
$xml->localName; // gives tag name
$xml->value; // gives tag value
//so, right now we're at depth n in the XML document. depth n-1
//would be our parent node
if ($xml->depth > 0) {
//gives the fragment that starts with the parent node
$last_node_at_depth[($xml->depth-1)];
}
}