1
を使用して、特定の祖先と子孫を持たないタグを取得するにはどうすれば、次のXMLからのタグとBタグを取得したいのですが、私は第二のタグを削除する:REXML
......many other tags.
<A>abc</A>
<A> <<==== I want to remove this A tag from result.
<B>def
<A>foo</A>
<A>hoge</A>
<A>bar</A>
</B>
</A>
.......
私はこのXPathを使用しています:
//*[self::A[not(descendant::B) or self::B]]
しかし、このXPathは二回Bタグのタグ内を取得します。
<A>abc</A>
<B>def
<A>foo</A>
<A>hoge</A>
<A>bar</A>
</B>
<A>foo</A>
<A>hoge</A>
<A>bar</A>
そして、私はこれを書きましたXpathは、それが動作しません:
//*[self::A[not(descendant::B or ancestor::B) or self::B]]
私はこの結果を取得したい:
<A>abc</A>
<B>def
<A>foo</A>
<A>hoge</A>
<A>bar</A>
</B>
.......
は、どのように私はこの問題を解決することができますか?
//*[self::A[not(./B) and not(./parent::B)] or self::B]
出力:XPath
表現の下に使用する
を持っていない私は[鋸山]を使用してお勧めします
A
を意味し、 (http://www.nokogiri.org)をREXML上で公開しています。 REXMLにはRubyが付属していますが、Nokogiriは高速でデファクトスタンダードです。また、XPathに加えてCSSセレクタの使用をサポートしているため、特定のルックアップに適したものを選択できます。 –