如何获取GPathResult的下一个兄弟节点?例如,我有以下代码:
def priorityIssue = xmlReport.'**'.find { Issue -> Issue.Priority.text() == priority }
如何获取priorityIssue的下一个兄弟节点?谢谢你,谢谢
2w2cym1i1#
或多或少,这是一条路要走:
import groovy.util.XmlSlurper def xml = new XmlSlurper().parseText(''' <issues> <issue> <id>1</id> <priority>1</priority> </issue> <issue> <id>2</id> <priority>2</priority> </issue> </issues> ''') def p = '1' def priorityIssue = xml.'**'.find { issue -> issue.priority.text() == p } def kids = priorityIssue.parent().children().list() def idx = kids.indexOf(priorityIssue) def sibling = kids[++idx] assert sibling.id.text() == '2'
w41d8nur2#
indexOf()的解决方案仅在搜索具有唯一文本内容的节点时有效。问题是,NodeChild示例总是由text()进行比较,参见GPathResult#hashCode()。我必须到达实际的节点,而不是它们的代理NodeChild。
indexOf()
NodeChild
text()
GPathResult#hashCode()
xml = new groovy.util.XmlSlurper().parseText('''\ <issues> <issue> <first/> <priority>1</priority> </issue> <issue> <second/> <priority>2</priority> </issue> <issue> <third/> <priority>1</priority> </issue> </issues> ''') third = xml.'**'.find{it.name() == 'third'} thirdIssue = third.parent() issues = thirdIssue.parent().children() println 'wrong: ' + issues.list().indexOf(thirdIssue) println 'right: ' + issues.findIndexOf{it[0] == thirdIssue[0]}
额外小费:您也可以使用Integer.toHexString(System.identityHashCode(issue))来检查您正在处理的示例。
Integer.toHexString(System.identityHashCode(issue))
2条答案
按热度按时间2w2cym1i1#
或多或少,这是一条路要走:
w41d8nur2#
indexOf()
的解决方案仅在搜索具有唯一文本内容的节点时有效。问题是,NodeChild
示例总是由text()
进行比较,参见GPathResult#hashCode()
。我必须到达实际的节点,而不是它们的代理NodeChild
。额外小费:您也可以使用
Integer.toHexString(System.identityHashCode(issue))
来检查您正在处理的示例。