def resolveIdentifier(qualifiedName)
return @elementByQName[qualifiedName] if @elementByQName.has_key?(qualifiedName)
path = qualifiedName.split(separator).reject{|s| s == ""}
if path.size > 1
parentQName = (leadingSeparator ? separator : "") + path[0..-2].join(separator)
parents = resolveIdentifier(parentQName)
parents = [parents].compact unless parents.is_a?(Array)
children = parents.collect{|p| allNamedChildren(p)}.flatten
elsif path.size == 1
parentQName = ""
children = allRootNamedChildren
else
return @elementByQName[qualifiedName] = nil
end
if !@visitedQName[parentQName]
children.each do |c|
name = c.send(nameAttribute)
if name
qname = parentQName + ((parentQName != "" || leadingSeparator) ? separator : "") + name
existing = @elementByQName[qname]
if existing
@elementByQName[qname] = [existing] unless existing.is_a?(Array)
@elementByQName[qname] << c
else
@elementByQName[qname] = c
end
end
end
@visitedQName[parentQName] = true
end
@elementByQName[qualifiedName] ||= nil
end