次の XPath を使用して、id 'mpp_controls' を持つ div 内のものを除いて、ドキュメントからすべての空でないテキスト ノードとイメージ ノードを取得します。
//img[not(ancestor::*[@id='mpp_controls'][normalize-space()])] | //text()[not(ancestor::*[@id='mpp_controls'])][normalize-space()]
述語は両方の要素で同じであり、将来同様のクエリにさらにタグを追加する可能性があるため、短くしてみました。この答えを見て、私は思いつきました:
//*[self::img or self::text()][not(ancestor::*[@id='mpp_controls'])][normalize-space()]
そして私も試しました:
//*[img or text()][not(ancestor::*[@id='mpp_controls'])][normalize-space()]
残念ながら、どちらも構文エラーになります。このクエリを短縮することはまったく可能ですか?