`

EMF的存储设置

XML 
阅读更多
一般我们在对EMF模型内容进行输出,这里需要进行一些定制,下面是我在项目中做的一些定制,第一个是要将EMF Model输出的xml中去掉一些名称空间的信息,第二个就是希望把某些信息由Attribute类型转换成Content类型,在得到的content类型的内容默认情况下会对<, >, &等字符进行转换,这个也可以进行控制。借鉴EMF开发指南的做法,其实很简单,这里要注意save和load使用的控制选项设置必须一致。
具体做法如下,
因为保存和加载xml是在XMLResourceImpl里面进行的,所以我们需要从该类继承,overriding 相应的load和save方法,然后在使用到XMLResourceImpl的地方改成使用我们的派生之类,在定制的子类中,我们做了如下实现:
java 代码
  1. public void load(Map options) throws IOException {   
  2.     super.load(addOptions(options));   
  3. }   
  4.   
  5. public void save(Map options) throws IOException {   
  6.     super.save(addOptions(options));   
  7. }   
  8.   
  9. /**  
  10.  * 设置序列化/反序列化选项  
  11.  *   
  12.  * @param options  
  13.  */  
  14. private Map addOptions(Map options) {   
  15.     // 这里的map只应创建一次   
  16.     XMLResource.XMLMap xmlMap = new XMLMapImpl();   
  17.   
  18.     EPackage ePackage = Configuration.INSTANCE.getViewEPackage();   
  19.     XMLResource.XMLInfo info = new XMLInfoImpl();   
  20.     info.setXMLRepresentation(XMLResource.XMLInfo.CONTENT);   
  21.   
  22.     // 将event的内容在attribute和content之间转换   
  23.     EClass eClass = (EClass) ePackage   
  24.             .getEClassifier(Configuration.EVENT_NAME);   
  25.     xmlMap.add(eClass   
  26.             .getEStructuralFeature(Configuration.EVENT_ATTRIBUTE_CONTENT),   
  27.             info);   
  28.   
  29.     // 在生成的ddxml中去掉namespace声明   
  30.     xmlMap.setNoNamespacePackage(ePackage);   
  31.   
  32.     if (options == Collections.EMPTY_MAP) {   
  33.         options = new HashMap();   
  34.     }   
  35.        
  36.     options.put(XMLResource.OPTION_XML_MAP, xmlMap);   
  37.        
  38.     // 避免对<,>,&等字符进行转换   
  39.     options.put(XMLResource.OPTION_SKIP_ESCAPE, Boolean.TRUE);   
  40.   
  41.     return options;   
  42. }  

 

因为我们这里没有对特殊字符进行转换,所以我们需要在生成的content类型的内容加上<![CDATA, ]]>, 这个我们需要生成自己的XMLSaveImpl,然后overriding getContent(EObject o, EStructuralFeature[] features)这个方法:

java 代码
  1. protected String getContent(EObject o, EStructuralFeature[] features) {   
  2.     if (map == null)   
  3.     {   
  4.       return null;   
  5.     }   
  6.   
  7.     for (int i = 0; i < features.length; i++)   
  8.     {   
  9.       EStructuralFeature feature = features[i];   
  10.       XMLResource.XMLInfo info = map.getInfo(feature);   
  11.       if (info != null && info.getXMLRepresentation() == XMLResource.XMLInfo.CONTENT)   
  12.       {   
  13.         Object value = helper.getValue(o, feature);   
  14.         String svalue = getDatatypeValue(value, feature, false);   
  15.         if (toDOM)   
  16.         {               
  17.           Node text = document.createTextNode(svalue);   
  18.           currentNode.appendChild(text);   
  19.           handler.recordValues(text, o, feature, value);   
  20.         }else {   
  21.             // 将内容前后加上<![CDATA and ]]>   
  22.             svalue = "<![CDATA[\n" +svalue + "\n]]>";   
  23.         }   
  24.         return svalue;   
  25.       }   
  26.     }   
  27.     return null;   
  28. }   

 当然了还必须在前面自己的XMLResourceImpl类里面重载createXMLSave()方法:

 

java 代码
  1. protected XMLSave createXMLSave() {   
  2.     return new DoradoXMLSaveImpl(createXMLHelper());   
  3. }  
分享到:
评论

相关推荐

    emf-loophole:EMF Loophole 帮助您实现 EMF 代码生成的代沟模式

    更新管理器中的以下 Eclipse p2 存储库(更新站点)(在 Eclipse 中, Help Menu &gt; Install New Software... ,右上角的Add...按钮)提供所有版本的所有版本: 可以使用以下 URL 访问每个EMF版本的版本: 用于EMF...

    blueprints-emf:蓝图的 EMF 绑定(用于 EMF 的 GraphDB)

    使用将模型存储在图形数据库中,例如 Neo4J、OrientDB、Titan 等...。 当前版本是 0.3.0。 依赖关系 蓝图 2.6.0 或更高版本 安装 将在 maven central 上可用。 现在做 git clone ...

    imdb2emf:将 IMDb 电影数据库解析为 EMF 模型

    用法您可以克隆这个存储库并安装 Leiningen 来解析 IMDb 文件,也可以下载一个没有依赖项的预编译 JAR。用法:Git 从下载文件 actor.list.gz、actores.list.gz、movies.list.gz 和 ratings.list.gz,并将它们放在...

    emf-rest:EMF作为RESTFul API

    电动势休息什么是EMF-... 当前,这些对象然后作为XML文件存储在服务器中。 EMF-REST还生成JavaScript库,以促进客户端上API的管理(例如,使用点符号进行导航)。接下来会发生什么? 我们目前正在努力: 模型管理支持

    围绕EMF探索

    火龙果软件工程技术中心 围绕EMF探索(1)之存储 EMF(EclipseModelingFramework)的应用会越来越多,而围绕EMF的query,validate,transaction,persistency等等讲逐渐被大家使用,以及EMFeCore也有非常大的参考价值。...

    EMF-IncQuery-Addons:EMF-IncQuery模型查询框架的附加组件

    EMF-IncQuery-附加组件模型查询框架。 该存储库中的所有代码都可以在Eclipse Public License v1.0下获得: :

    电磁场matlab仿真代码-exposure-infinite-emf-sources:暴露无限的emf源

    电磁场matlab仿真代码论文“从典型基站同时暴露于无限RF-EMF源”的仿真文件 该存储库有两个文件夹:“ java代码”和“ matlab代码”。 “ matlab代码”文件夹 该文件夹包含用于生成论文图形和表格的Matlab代码。 在...

    Repository as a Service for EMF:存储在 RDBMS 中的 EMF 对象的 Web 服务可访问存储库-开源

    迁移到 GITHUB:https://github.com/patins1/raas4emf/

    emf-fragments:自动从code.google.compemf-fragments导出

    EMF片段强调新数据的快速存储和持久化模型的快速导航。 该框架的要求来自实时存储和分析大量传感器数据。 EMF片段不同于基于对象关系映射(ORM)的框架,例如连接数据对象(CDO)。 虽然ORM映射将单个对象,属性和...

    完整的打印机监控源码

    并把内容转成图片储存。并将图片传送到服务器机器上,并将打印内容传到服务器上面. 解决方案: 1. 先用api打印函数连接到指定的打印机.再试着用枚举函数()获得打印作业信息.根据信息得知打印的内容,及当前的状态. ...

    基于Eclipse RCP Email客户端的实现

    本系统适用于所有用户,无管理员设置,可以创建多个网络邮箱帐号,可以编辑、接收和发送邮件等,不仅支持文本文件的发送与接收,还支持带附件邮件的发送与接收,支持抄送,还具有通讯录的存储功能。本系统在开发过程...

    Mail Client based on Eclipse RCP

    本系统适用于所有用户,无管理员设置,可以创建多个网络邮箱帐号,可以编辑、接收和发送邮件等,不仅支持文本文件的发送与接收,还支持带附件邮件的发送与接收,支持抄送,还具有通讯录的存储功能。本系统在开发过程...

    单片机或ARM存储图片软换软件

    *.emf)转换为RAW -当源文件不是bmp时可以选择同时将源文件转换为bmp -增加RGB1555格式文件的输出功能 -增加转换耗时显示 -增加将源文件不经过格式转换直接生成C功能(此功能下可以转换任意文件) -在生成的.c文件中...

    emfjson-samples:emfjson样本

    该存储库包含示例项目,该示例项目演示了的用法。 样品 下表显示了此存储库中可用的示例。 项目 描述 emfjson-jackson-samples 具有EMF Resource API和Jackson API的EMFJson emfjson-gwt-sample EMFJson与GWT ...

    便捷抓图免安装版

     同时支持存储为当前几乎所有的图片格式:BMP、JPG、Emf、Exif、Gif、Ico、MemoryBmp、Png、Tiff、Wmf等;  本软件无需安装,下载附件后直接解压缩出可运行文件运行即可,使用方法非常简单便捷;

    dresdenocl:德累斯顿OCL提供了一组工具来解析和评估OML在各种模型(如UML,EMF和Java)上的约束。 此外,德累斯顿OCL提供了用于JavaAspectJ和SQL代码生成的工具

    将luna.target设置为目标平台窗口-&gt;首选项-&gt;插件开发-&gt;目标平台 安装方式: 克隆存储库: : 从文件夹中签出以下项目 插件/ ** 测试/ ** 生成项目(否则它将抱怨找不到Ocl22Parser) 在德累斯顿OCL的根目录上...

    ImageEn3.02_Full_Source_Include_Libs

    加载WMF,EMF和CUR文件格式 加载并保存为AVI, 动态的GIF和多页的TIFF文件格式 读取单独的AVI帧格式 从JPEG和TIFF图像中读取/写入IPTC(IIMV4)信息(像PhotoSho中的文信息)。无需加载XIng或改变原图像就能替换...

    MultiExtractor

    从图片,音频,视频文件提取BMP, JPG, GIF, IFF, PNG, PCX, TGA, ICO, CUR, TIFF, EMF, WMF, DDS, 3DS, LWO, TTC, TTF, FON, XM, MOD, WAV, OGG, MP3, MID, S3M, AVI, MPG, DAT, ASF, MOV, FLC, SWF, BIK, SMK, MPQ)...

    MultiExtractor_Pron 3.0

    •从图片,音频,视频文件提取BMP, JPG, GIF, IFF, PNG, PCX, TGA, ICO, CUR, TIFF, EMF, WMF, DDS, 3DS, LWO, TTC, TTF, FON, XM, MOD, WAV, OGG, MP3, MID, S3M, AVI, MPG, DAT, ASF, MOV, FLC, SWF, BIK, SMK, ...

Global site tag (gtag.js) - Google Analytics