groovy GPathResult字段namesapceTagHints具有Map< String,String>类型,但getClass()返回NodeChildren

rta7y2nd  于 4个月前  发布在  其他
关注(0)|答案(1)|浏览(51)

我想我快疯了。我正在使用Groovy处理xml文件,想写一个小助手类来帮助自己以类型化的方式通过名称获取节点。在这样做的同时,我创建了一个扩展NodeChild的类:

class XmlNode extends NodeChild {

    XmlNode(NodeChild nodeChild) {
        super(nodeChild[0] as Node, nodeChild.parent, nodeChild.namespacePrefix, nodeChild.namespaceTagHints)
    }

    // helpful methods
}

字符串
但是我不能示例化这个类而不得到这个错误:

org.codehaus.groovy.runtime.typehandling.GroovyCastException: Cannot cast object '' with class 'groovy.xml.slurpersupport.NodeChildren' to class 'java.util.Map'


所以我得检查一下。很显然:

println(nodeChild.namespaceTagHints.getClass())


退货:

class groovy.xml.slurpersupport.NodeChildren


但是至少根据Apache Groovy GitHub项目,namespaceTagHints应该是Map<String, String>类型。
有谁能解释一下这是怎么回事吗?还是我完全错过了什么?

sr4lhrrt

sr4lhrrt1#

正如@tim_yates提到的,nodeChild.namespaceTagHints通过nodeChild.getProperty("namespaceTagHints")进行评估
并且根据代码,它尝试获取具有对应名称GPathResult.java#L118的子XML节点
作为替代nodeChild.namespaceTagHints的解决方法,您可以使用:用途:

NodeChild.metaClass.getProperty(nodeChild, 'namespaceTagHints')

字符串
nodeChild.parentnodeChild.namespacePrefix相同

相关问题