2011-08-11 8 views

उत्तर

25

यहाँ इसी टुकड़ा है:

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

कुछ अन्य लिंक आप पढ़ना चाहते हैं हो सकता है:

+3

यह ग्रूवी, GPath नहीं है में है। मुझे एक जीपीएथ अभिव्यक्ति की आवश्यकता है। – yegor256

+3

यह भी सुनिश्चित नहीं है कि आपका क्या मतलब है, क्योंकि GPath अधिकतर अतिरिक्त प्रतीकों के साथ ग्रोवी सिंटैक्स का उपयोग कर रहा है: ".." जो माता-पिता "*" देता है जो सभी बच्चों को "**" देता है जो गहराई के रूप में कार्य करता है पहला लूप "@" जिसका उपयोग सामान्य नोड एक्सेसर को किसी संपत्ति तक पहुंचने के लिए किया जाता है। –

+1

मैं कुछ ढूंढ रहा हूं जैसे कि "..div {it। @ Id == 'foo'}" ', लेकिन यह काम नहीं कर रहा है .. – yegor256

7

पिछले पोस्टर आप सभी को दे दिया यह आवश्यक है: आपके दस्तावेज़ को मानना ​​बंद कर दिया गया है xml, आप

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

एक परिणाम खोजने के लिए चाहते हैं। या सभी परिणाम खोजने के लिए findAll

+0

'XP' में XPath का अर्थ है कि मुझे सही पथ नहीं पता 'div' – yegor256

+1

ठीक है। तो पिछले पोस्टर ने आपको समाधान दिया: - 'xml.depthFirst() का उपयोग करें। {it.name() ==' div '&& id। @ id ==' foo} ' – winstaan74

+0

@ winstaan74 सभी को प्राप्त करने की अभिव्यक्ति क्या है एक विशिष्ट विशेषता नाम वाले तत्व? – raffian

1

क्या आप की जरूरत यह है:

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

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

अपने डबल * यदि आप पथ जानने के बिना इसे खोजने देंगे। कम से कम यह मैं यह कैसे करता हूं।

+1

तत्व नाम से नोड का पहला उदाहरण आपको कैसे मिलता है, मानते हैं कि एक से अधिक है? – raffian

+0

'xml। '**'। {It.name() == 'elementName'}' और यह पहला होगा। –

1

की नकल करने के लिए अभिव्यक्ति // div [@ id = 'foo'] निकटतम बात आप एक GPath के साथ कर सकते है:

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

'**' काफी 'के रूप में एक ही है// 'अपने XPath में।

xml.'**'.div 

किसी भी स्तर पर टाइप div के सभी नोड्स उत्पन्न करेगा।

बाद में दिए गए बंद के साथ findAll साथ छानने() आप नोड्स की एक सूची प्राप्त के रूप में आप XPath मामले