[zt]利用EMF直接从xml文档载入模型

FROM:http://ganzhi.bokee.com/2968058.html

通常我们使用EMF的方式是让EMF为我们产生stub代码。但有些情况下可能无法预先生成Java代码,而需要直接从XML文件中直接载入模型。使用GenericXMLResourceFactoryImpl能够直接载入XML文档,不管这个文档是否具有Schema。如果XML文档具有Schema,那么GenericXMLResouceFactoryImpl能够根据schema生成Epackage。(载入没有schema的XML文档是在EMF 2.1.0之后加入的)

java 代码
  1. package ganzhi.test.emf;   
  2.   
  3. import java.io.File;   
  4. import java.io.IOException;   
  5. import java.util.HashMap;   
  6. import org.eclipse.emf.common.util.TreeIterator;   
  7. import org.eclipse.emf.common.util.URI;   
  8. import org.eclipse.emf.ecore.resource.Resource;   
  9. import org.eclipse.emf.ecore.resource.ResourceSet;   
  10. import org.eclipse.emf.ecore.resource.impl.ResourceSetImpl;   
  11. import org.eclipse.emf.ecore.xmi.XMLResource;   
  12. import org.eclipse.emf.ecore.xmi.impl.GenericXMLResourceFactoryImpl;   
  13. import org.eclipse.emf.ecore.xmi.impl.XMLParserPoolImpl;   
  14.   
  15. public class LoadNoSchemaXML {   
  16.   
  17.     /**  
  18.      *   
  19.      * @param args  
  20.      *   
  21.      */  
  22.   
  23.     public static void main(String[] args) {   
  24.   
  25.         try {   
  26.   
  27.             HashMap options = new HashMap();   
  28.   
  29.             options.put(XMLResource.OPTION_USE_PARSER_POOL,   
  30.   
  31.             new XMLParserPoolImpl());   
  32.   
  33.             options.put(XMLResource.OPTION_EXTENDED_META_DATA, Boolean.TRUE);   
  34.   
  35.             options.put(XMLResource.OPTION_USE_LEXICAL_HANDLER, Boolean.TRUE);   
  36.   
  37.             ResourceSet rs = new ResourceSetImpl();   
  38.   
  39.             Resource.Factory.Registry.INSTANCE.getExtensionToFactoryMap().put(   
  40.   
  41.             "xml"new GenericXMLResourceFactoryImpl());   
  42.   
  43.             URI fileURI = URI.createFileURI(new File(   
  44.   
  45.             "ganzhi\\test\\emf\\schema\\LibraryNoS.xml")   
  46.   
  47.             .getAbsolutePath());   
  48.   
  49.             Resource resource = rs.createResource(fileURI);   
  50.   
  51.             resource.load(options);   
  52.   
  53.             int i = 0;   
  54.   
  55.             for (TreeIterator ti = resource.getAllContents(); ti.hasNext();) {   
  56.   
  57.                 System.out.println(i);   
  58.   
  59.                 System.out.println(ti.next());   
  60.   
  61.                 i++;   
  62.   
  63.             }   
  64.   
  65.         } catch (IOException e) {   
  66.   
  67.             // TODO Auto-generated catch block   
  68.   
  69.             e.printStackTrace();   
  70.   
  71.         }   
  72.   
  73.     }   
  74.   
  75. }   
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值