使用从XSD生成的EMF模型读取XML只读取属性而不读取值

时间:2015-07-15 17:37:07

标签: emf ecore

我从一个XML模式生成一个EMF模型,从第一眼看起来一切都很好但在EMF运行时实例中我只能用它的String" name"来访问属性特征。但价值" / firstfloor ..."未在EMF中设置。知道为什么吗?

提前致谢!

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>

1 个答案:

答案 0 :(得分:0)

我终于找到了答案。我必须修改ecore模型并将aspectvalue标签名称设置为&#34;上限:-1&#34;。 EMF更改模型而不是值设置器&#34; setValue&#34;我可以添加一个集合作为值。有点奇怪,但它有效我可以生成上面的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);

阅读EMF

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);