public XmlNodeList GetElementsByType(string ns, string type)
{
List<XmlSchemaType> matches;
if (!compatibleTypes.ContainsKey (type)) {
compatibleTypes.Add (type, matches = new List<XmlSchemaType> ());
// System.err.println ("%% Looking for " + ns + ":" + type);
foreach (string key in typesByName.Keys) {
List<XmlSchemaType> types = typesByName [key];
foreach (XmlSchemaType info in types) {
if (type.Equals (info.Name) || IsDerived (new XmlQualifiedName (type, ns), info)) {
matches.Add (info);
// System.err.println ("%% Found: " + info.getTypeName ());
}
}
}
}
else
matches = compatibleTypes [type];
MutableNodeList result = new MutableNodeList ();
foreach (XmlSchemaType info in matches) {
// System.err.println ("-- Matching elements of type: " + info.getTypeName ());
if (elementsByType.ContainsKey (info.Name)) {
foreach (XmlElement element in elementsByType [info.Name]) {
XmlSchemaType typeInfo = element.SchemaInfo.SchemaType;
if (typeInfo.QualifiedName.Equals (info.QualifiedName)) {
result.Add (element);
// System.err.println ("-- Matched: " + element.getLocalName ());
}
}
}
}
return (result);
}