मुझे उम्मीद है कि कोई व्यक्ति कुछ स्पष्ट बताएगा कि मैं यहां याद कर रहा हूं। मुझे लगता है कि मैंने इसे सौ बार किया है और आज रात किसी कारण से, इस से आने वाला व्यवहार मुझे लूप के लिए फेंक रहा है।ग्रोवी नोड.depthFirst() नोड्स और स्ट्रिंग्स की एक सूची लौट रहा है?
मैं कुछ एपीएल में सार्वजनिक एपीआई से पढ़ रहा हूं। मैं एक निश्चित नोड ('शरीर' के भीतर सबकुछ) से सभी पाठ निकालना चाहता हूं, जिसमें विभिन्न प्रकार के बाल नोड भी शामिल हैं। सरल उदाहरण:
<xml>
<metadata>
<article>
<body>
<sec>
<title>A Title</title>
<p>
This contains
<italic>italics</italic>
and
<xref ref-type="bibr">xref's</xref>
.
</p>
</sec>
<sec>
<title>Second Title</title>
</sec>
</body>
</article>
</metadata>
</xml>
तो अंत में मैं वांछित नोड (फिर से, 'शरीर') के भीतर पेड़ पार और सभी पाठ अपनी प्राकृतिक क्रम में निहित निकालना चाहते हैं। काफी सरल है, इसलिए मैं अभी इस छोटे ग्रूवी स्क्रिप्ट लिखने ...
def xmlParser = new XmlParser()
def xml = xmlParser.parseText(rawXml)
xml.metadata.article.body[0].depthFirst().each { node ->
if(node.children().size() == 1) {
println node.text()
}
}
... जिसके साथ को उड़ाने की आगे बढ़ता है "विधि का कोई हस्ताक्षर नहीं: java.lang.String.children()"। तो मैं खुद से सोच रहा हूं "रुको, क्या? क्या मैं पागल हो रहा हूँ?" Node.depthFirst() केवल नोड की एक सूची वापस करनी चाहिए। मैं थोड़ा 'exampleof' चेक जोड़ता हूं और पर्याप्त रूप से पर्याप्त हूं, मुझे नोड ऑब्जेक्ट्स और स्ट्रिंग ऑब्जेक्ट्स का संयोजन मिल रहा है। विशेष रूप से एक ही पंक्ति पर इकाइयों के भीतर की रेखाएं स्ट्रिंग्स, उर्फ "इसमें शामिल हैं" और "और" के रूप में वापस आती हैं। बाकी सब कुछ एक नोड है (जैसा कि अपेक्षित) है।
मैं इस आसानी से आसानी से काम कर सकता हूं। हालांकि, यह सही व्यवहार की तरह प्रतीत नहीं होता है और मुझे उम्मीद है कि कोई मुझे सही दिशा में इंगित कर सकता है।
जहां तक जैसा कि मैं बता सकता हूं, Node.depthFirst व्यवहार करता था क्योंकि आप ग्रोवी 1.7 में अपेक्षा करेंगे। Groovy 2.0+ में, मैं नोड्स/स्ट्रिंग्स के समान परिणाम देख रहा हूं। – Joseph