XPath を学べば学ぶほど、逆参照が必要になる
たとえば、中間ステップのいくつかの情報を発見した場合、後でその情報を使用する必要がある場合があります。この問題には実際には、述語式にも XPathes を含めることができるという少しの助けを借りた回避策があります。実用的なソリューションは次のようになります
/foo/item[@attrtocheck = ../../otheritem[@anotherattr]]
しかし、このアプローチの問題は、いくつかの基準で述語を評価するだけで、これに基づいて複数の結果を得ることができないことです。同じ @anotherattr のアイテムが他にもたくさんあっても集めきれません。したがって、より良い解決策は
/foo/item[@attrtocheck]/../../otheritem[@anotherattr=BACKREFERENCING_ATTRTOCHECK_VALUE]
しかし、私が知っている限り、それは不可能です。
標準に解決策がない場合、いくつかのツール/ライブラリに拡張機能があるのではないでしょうか? 実際、私は独自のエンジンを実装しており、非標準の構文が既に存在する場合は、それを採用します。
更新: Michael Kay のコメントの後、この機能が恋しい理由についての詳細
実は私は、AST (Abstract syntax trees) の XPath 検索を実装しています。これを試みたのは私が初めてではありません ([Xpath AST] の Web 検索)。この種の検索により、ツリーのさまざまな部分間の非常に強い関係が明らかになります。たとえば、あるコンテキスト(たとえば、他のメソッド内)で呼び出しを見つけた場合、このシンボルが仮想関数として導入されているかどうか、およびそれが結果に出力されているかどうかを知りたいと思います。この場合、最初の検索で以前は不明だったシンボル (関数名) が生成され、それを次のサブパス (クラス宣言とそのキーワードの検索) で使用したいと考えています。したがって、後方参照は非常に役立ちます。
ASTに適用できれば、他の構造化データでもそのような関係を持つ可能性があると思います。