EMF提供了將定義好的metamodel serialize成XMI(XML Interchange)格式的功能。使用這個功能,可以將Object 序列化為XMI文檔。程式如下:(此範例程式使用了由My.ecore這個EMF meta model產生出來的model code。此處可下載emftest.zip(內含My.ecore),下載後需再用EMF的工具,產生EMFTest這些package的Java code)
import EMFTest.EMFTestFactory;    
  import EMFTest.EMFTestPackage;     
  import EMFTest.vincent;     
  import EMFTest.impl.EMFTestPackageImpl; 
public class TestData {
    /**    
     * @param args     
     */     
    public static void main(String[] args) {     
        //要先Initial PackageImpl,才能使用EMF的功能     
        EMFTestPackageImpl.init();     
        //Serialize時,所需的參數儲存於 saveOptions     
        Map<String, Object> saveOptions = new HashMap<String, Object>();     
        //啟用OPTION_EXTENDED_META_DATA後,才能指定要讓某個attribute Serialize為Element,而不是Attributes      
        saveOptions.put(XMLResource.OPTION_EXTENDED_META_DATA, Boolean.TRUE);     
        //設定vincent.company及vincent.location這2個attribute要serialize成Element     
        EMFTestPackage testPackage = EMFTestPackageImpl.eINSTANCE;     
        EAttribute companyAttr = testPackage.getvincent_Company();     
        EAttribute locationAttr = testPackage.getvincent_Location();     
        XMLMapImpl map = new XMLMapImpl();     
        XMLInfoImpl x = new XMLInfoImpl();     
        x.setXMLRepresentation(XMLInfoImpl.ELEMENT);     
        map.add(companyAttr, x);     
        map.add(locationAttr, x);     
        saveOptions.put(XMLResource.OPTION_XML_MAP, map);  
        saveOptions.put(XMLResource.OPTION_ENCODING, "UTF-8");       
     EMFTestFactory testFactory = EMFTestFactory.eINSTANCE;    
        vincent testElement = testFactory.createvincent();     
        testElement.setAge(32);     
        testElement.setCompany("IBM");     
        testElement.setLocation("Taipei");     
        ResourceSet resourceSet = new ResourceSetImpl();     
        // Register XML resource factory     
        resourceSet.getResourceFactoryRegistry().getExtensionToFactoryMap().put("xml", new XMLResourceFactoryImpl());     
        Resource resource = resourceSet.createResource(URI.createFileURI("Vincent.xml"));     
        // add the root object to the resource     
        resource.getContents().add(testElement);     
        // serialize resource – you can specify also serialization     
        // options which defined on org.eclipse.emf.ecore.xmi.XMIResource     
        try {     
            resource.save(saveOptions);     
        } catch (IOException e) {     
            // TODO Auto-generated catch block     
            e.printStackTrace();     
        }     
    } 
}
上面的程式中,透過啟用OPTION_EXTENDED_META_DATA,使得可以設定那些EMF model的attribute要產生成XML的element。另一種做法為,直接在Ecore model的diagram中,增加Extended Meta Data,把要設定的Attribute設為element。如下圖
注意:這個方法要work,一樣要在serialize XML的程式中,加入
saveOptions.put(XMLResource.OPTION_EXTENDED_META_DATA, Boolean.TRUE);參考資料: