Я пытаюсь зарегистрировать определения классов динамически, так что я могу проанализировать XML-документ позже, чтобы получить правильный класс в правильном пространстве имен. Я хочу, чтобы это было сделано:Как получить определение класса из префикса и имени узла с помощью SchemaTypeRegistry и SchemaManager?
var classObject:Object = typeRegistry.getClassDefinition("s:WindowedApplication");
Но у меня его нет. Вот где я нахожусь. Я могу зарегистрировать типы с использованием экземпляра или квалифицированное строку имени класса с помощью SchemaTypeRegistry:
typeRegistry = SchemaTypeRegistry.getInstance();
var windowedApplicationQName:QName = new QName(MXMLDocumentConstants.sparkNamespaceURI, "WindowedApplication");
//typeRegistry.registerClass(windowedApplicationQName, WindowedApplication);
typeRegistry.registerClass(windowedApplicationQName, "spark.components::WindowedApplication");
Затем я могу получить класс и создать экземпляр этого достаточно легко:
var className:Object = typeRegistry.getClass(windowedApplicationQName);
var classInstance:Object;
classInstance = new className();
Но позже Я внутри текстового документа, не спрашиваю, почему, ОК. Я в текстовом редакторе XML, и я могу получить имя узла XML, в этом случае это значение: s: WindowedApplication.
Так что теперь, когда я пытаюсь зарегистрировать известное пространство имен URI, и я делаю это с SchemaManager (не в документации распространяется QualifiedResourceManager):
schemaManager = new SchemaManager();
schemaManager.addNamespaces({s:MXMLDocumentConstants.sparkNamespace});
var qname:QName = schemaManager.getQNameForPrefixedName("s:WindowedApplication");
Это здорово, потому что я могу получить QName объект, а затем я могу найти его с помощью реестра типа так:
qname = schemaManager.getQNameForPrefixedName("s:WindowedApplication");
var classObject:Object = typeRegistry.getClass(qname);
Но я столкнулся с этим проблемы.
Задача 1:
Если префикс «s» не зарегистрирован в schemaManager или нет префикса «WindowedApplication» против «s: WindowedApplication», то schemaManager выдает ошибку. Это потому, что он ожидает схему, но типы данных динамические, поэтому их нет.
Задача 2:
SchemaTypeRegistry не имеет знания префиксов пространств имен и SchemaManager не имеет знания определений классов из пространства имен в ней хранится. Это приводит меня к мысли, что есть часть, которую мне не хватает.
Так что притворяясь, что у меня нет хрупкой, отключенной системы, есть официальный или лучший способ хранения определений классов, их пространств имен и префиксов?
Update:
Если ничего другого я не мог продлить либо класс и добавить код из любого класса, чтобы соединить определения класса с пространством имен и префиксов. Но опять же, кажется, что кусок пропал.