我希望有人将刚指出,我在这里失踪了一些东西明显。 我觉得像我这样做一百次,由于某种原因,今晚,从这个未来的行为是扔我一个循环。
我在一些XML从公共API阅读。 我想提取所有从某个节点(一切“体”内),其中还包括各种子节点的文本。 简单的例子:
<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>
所以,最后我想遍历树所需的节点(再次,“体”)内提取包含在它的自然秩序中的所有文本。 很简单,所以我就写了这个小Groovy脚本......
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()应该只返回节点的一个列表。 我加一点“的instanceof”检查,果然,我越来越Node对象和String对象的组合。 特别是不在同一行上的实体线返回字符串的,又名“这包含”与“和”。 一切是一个节点(如预期)。
我可以解决这一点很容易。 然而,这似乎是正确的行为不,我希望有人能指出我在正确的方向。