2011-08-11 7 views

答えて

25

は、対応するスニペットですそれは必須です:あなたの文書がxml、あなたが望む

def foo = xml.path.to.div.find{[email protected] == 'foo'} 

単一の結果を検索するにはまたはfindAllすべての結果を検索します。あなたがパスを知らなくてもそれを見つけるようになる

def root = new XmlSlurper().parseText(<locOfXmlFileYouAreParsing>.toURL().text) 

def foundNode = root.'**'.find{ [email protected] == "foo" } 

そのダブル*:あなたが必要なもの

+3

にそれはGPath、Groovyのではないかとあなたはノードのリストを取得与えられたクロージャでのfindAll()でろ過。私は単一のGPath式が必要です。 – yegor256

+3

GPathはほとんどの場合、次の余分な記号を含むgroovy構文を使用しているため、意味がわかりません: 親を返す ".." "*"すべての子を返します。 "**"深さ最初のループ "@"これは、通常のノードアクセサにプロパティにアクセスするために使用されます。 –

+1

私は '" ..div {it。@ id == 'foo'} ''のようなものを探していますが、動作しません。 – yegor256

7

以前のポスターはあなたのすべてを与えた。ここ

+0

XPathの '//'は私が正確なパスを知らないことを意味しますdivには – yegor256

+1

が表示されます。前のポスターはあなたに解決策を与えました: 'xml.depthFirst()を使ってください。{it.name()== 'div' && id。@ id == 'foo}' – winstaan74

+0

@ winstaan​​74特定の属性名を持つ要素 – raffian

1

はこれです。少なくともこれが私のやり方です。表現// divの[ID @ = 'foo' を]模倣する

+1

ノードの最初のインスタンスを複数の要素名でどのように見つけますか? – raffian

+0

'xml。 '**' find {it.name()== 'elementName'}' これは最初のものです。 –

1

あなたがGPathで行うことができます最も近いものがある:

def xml = new XmlParser().parseText(text) 
xml.'**'.div.findAll { [email protected]=="foo" } 

'**' はかなり/」と同じです/ 'をXPathに追加します。

xml.'**'.div 

は、任意のレベルでdivタイプのすべてのノードを生成します。

後で、XPathのケース

関連する問題