def parent_child(args, parentName, childName, findDescendant=False): if len(args) != 1: raise XPathContext.FunctionNumArgs() if len(args[0]) != 1: raise XPathContext.FunctionArgType(1,"xbrl:" + parentName) parent = args[0][0] if isinstance(parent,ModelObject) and \ parent.localName == parentName and parent.namespaceURI == XbrlConst.xbrli: if childName.startswith('@'): return parent.get(childName[1:]) elif childName == 'text()': return XmlUtil.textNotStripped(parent) elif childName == 'strip-text()': return XmlUtil.text(parent) elif findDescendant: return XmlUtil.descendant(parent, XbrlConst.xbrli, childName) else: return XmlUtil.child(parent, XbrlConst.xbrli, childName) raise XPathContext.FunctionArgType(1,"xbrl:" + parentName)