Чтение XML с моделью EMF, сгенерированной из XSD, считывает только атрибуты, но не значения

Я сгенерировал модель EMF из схемы XML, и на первый взгляд все выглядело хорошо, но в экземпляре среды выполнения EMF я могу получить доступ к функции атрибута только с его строковым «именем», но значение «/ firstfloor ...» не установлено в ЭМП. Есть идеи, почему?

Заранее спасибо!

Часть xml выглядит так:

<aspectvalue feature="name">/firstfloor/temperature/CurrentRoomTemp</aspectvalue>

Часть схемы xsd выглядит следующим образом:

<xs:complexType name="FeatureListType">
    <xs:sequence>
        <xs:element name="feature" minOccurs="1" maxOccurs="unbounded" type="FeatureType" />
    </xs:sequence>
</xs:complexType>

<xs:complexType name="FeatureType">
    <xs:attribute name="name" use="required" type="NameType" />
    <xs:attribute name="optional" use="optional" type="xs:boolean" />
    <xs:attribute name="deprecated" use="optional" type="xs:boolean" />
</xs:complexType>

person guido    schedule 15.07.2015    source источник


Ответы (1)


Наконец-то я нашел ответ сам. Мне нужно изменить модель ecore и установить для имени тега аспектного значения значение «верхняя граница: -1». EMF изменяет модель, и вместо установщика значения "setValue" я могу добавить коллекцию в качестве значения. Немного странно, но это работает. Я могу создать приведенный выше xml и прочитать его в модели EMF.

Сохранить экземпляр EMF

Resource.Factory.Registry reg = Resource.Factory.Registry.INSTANCE;
    Map<String, Object> m = reg.getExtensionToFactoryMap();
    m.put("xml", new XMLResourceFactoryImpl());

    ResourceSet resSet = new ResourceSetImpl();
    Resource resource = resSet.createResource(URI.createFileURI("/tmp/test.xml"));
    resource.getContents().add(emfModelData);
    resource.save(Collections.EMPTY_MAP);

Читать в ЭДС

EPackage.Registry.INSTANCE.put(LibraryPackage.eNS_URI, LibraryPackage.eINSTANCE);

    // add file extension to registry
    ResourceFactoryRegistryImpl.INSTANCE.getExtensionToFactoryMap().put("xml", new GenericXMLResourceFactoryImpl());

    Resource resource = new XMLResourceImpl(URI.createFileURI("/tmp/test.xml"));
    resource.load(Collections.EMPTY_MAP);
    EObject root = resource.getContents().get(0);
    System.out.println(root);
person guido    schedule 19.07.2015