Birinin sadece burada eksik olduğum belli bir şeyi işaret edeceğini umuyorum. Bunu yüzlerce kez yaptım ve bu gece bir sebepten dolayı, bundan kaynaklanan davranış beni bir döngü için atıyor.Groovy Node.depthFirst() bir düğüm ve dizge listesi döndürüyor?
Bazı XML'de bir genel API'den okurum. Tüm metni, çeşitli çocuk düğümlerini de içeren belirli bir düğümden ('beden' içindeki her şeyden) çıkarmak istiyorum. Basit bir örnek:
<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>
Yani sonuçta ben arzu düğüm (yine 'body') içindeki ağaç travers ve doğal sırayla bulunan tüm metin ayıklamak istiyorum. Yeterince basit, bu yüzden sadece ... ile havaya uçurmak ilerler
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()
}
}
... bu küçük Groovy senaryoyu yazma "yönteminin hiçbir imza: java.lang.String.children()". Yani kendime "bekle, ne? Ben deliriyor muyum?" Diye düşünüyorum. Node.depthFirst() yalnızca bir düğüm listesi döndürmelidir. Biraz 'instanceof' kontrolünü ekledim ve eminim ki, Node nesneleri ve String nesneleri bir araya getiriyorum. Özellikle, aynı satırdaki varlıklar içinde olmayan satırlar, String'in, "Bu içerir" ve "ve" gibi döndürülür. Her şey bir Düğüm (beklendiği gibi).
Bu konuda kolayca çalışabilirim. Ancak, bu doğru davranış gibi görünmüyor ve birisinin beni doğru yönde göstermesini umuyorum.
Bildiğim kadarıyla Anlattığım gibi, Node.depthFirst, 1.7'de beklediğiniz gibi davrandı. Groovy 2.0 + 'da, Nodes/Strings ile aynı sonuçları görüyorum. – Joseph