2012-03-17 32 views
3

Nokogiri::XML.xpath、または他のXMLパーサを使用して、指定されたパス以外のタグを見つけることは可能ですか?指定されたパスにxpathタグ​​がありません

たとえば、私は、次のXMLがある場合:

<root> 
    <bar>baz</bar> 
    <foo> 
    <bar>baz</bar> 
    </foo> 
</root> 

を私はバーが常にFOOの内側に存在することを知っているが、それはまた同じ場所毎回では必ずしもないのfooの外に存在してもよく、検索する方法がありますそのような種類の条件はxpathでですか?私はあなたがxml.xpath("//bar")を行うことができます知っていて、それはバーのすべてのインスタンスを返しますが、私はバーが中に存在することを親オブジェクトを知ることができるようにする必要があり

答えて

4

用途:

xml.xpath('//bar[not(ancestor::foo)]') 

これはどこでもfoo要素の下にないすべてのbar要素を選択します。

提供されているXML文書では、ルートの下にあるbarという要素が1つだけ選択されます。これは、Dimitreが作成した前提とは異なります。

+0

私が探していたもの、感謝! – Eugene

1

使用:。

//*[not(self::foo) and bar] 

これは、すべての要素を選択しますXML文書ではfooではなく、子はbarです。

提供されたXMLドキュメントの場合、これはただ1つの要素、つまりrootを選択します。

関連する問題