2011-08-11 61 views

回答

25

下面是對應的摘錄:

+3

這Groovy的,不是做GPATH。我需要一個GPath表達式。 – yegor256

+3

不太確定你的意思,因爲GPath主要使用groovy語法和以下額外符號: 「..」,返回父 「*」,返回所有兒童 「**」作爲深度第一個循環 「@」用於訪問普通節點訪問器的屬性。 –

+1

我正在尋找類似''..div {it。@ id =='foo'}「'的東西,但它不起作用.. – yegor256

7

以前的海報送給大家:

def node = new XmlSlurper().parseText(...) 
def foo = node.depthFirst().findAll { it.name() == 'div' && [email protected] == 'foo'} 

你可能需要閱讀其他幾個環節這是必需的:假設您的文檔已被淹沒xml,你想要

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

找到一個單一的結果。或findAll找到所有結果。

+0

XPath中的//表示我不知道確切的路徑到'div' – yegor256

+1

好的。那麼以前的海報給了你解決方案: - 使用'xml.depthFirst()。find {it.name()=='div'&& id。@ id =='foo}' – winstaan74

+0

@ winstaan​​74獲取所有內容的表達式具有特定屬性名稱的元素? – raffian

1

你需要的是這樣的:

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

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

其雙*,可以讓你發現它不知道的路徑。至少我是這樣做的。

+1

如何通過元素名稱找到節點的第一個實例,假設有多個節點? – raffian

+0

'xml。'**'。find {it.name()=='elementName'}' 這將是第一個。 –

1

要模仿表達// DIV [@ ID = '富']你可以用GPATH做最接近的事是:

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

的 '**' 幾乎是一樣的「/ /'在您的XPath中。

xml.'**'.div 

將在任何級別產生類型div的所有節點。

用的findAll後來過濾()用給定的封閉你的節點列表,你在XPath情況下

相關問題