`

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文件格式详解

    2. **多记录结构**:EMF文件由一系列记录组成,每个记录代表一个图形操作,如画线、填充区域或设置颜色。 3. **设备独立性**:EMF格式不依赖于特定的显示器或打印机,因此可以在不同设备间保持一致性。 4. **颜色和...

    微软emf文件格式详解

    传统的WMF格式虽然也能够存储矢量图形信息,但在处理高分辨率输出时存在一定的局限性,尤其是在不同分辨率下无法保证图像质量的一致性。EMF格式克服了这些缺点,成为了一种更为优秀的图形文件格式。 - **设备独立性...

    EMF文件提取文本,预览,打印

    1. **文本提取**:EMF文件可能包含文本信息,这些文本通常是以矢量形式存储的。文本提取过程是从EMF文件中识别并提取出可读的文本内容。这通常需要解析文件结构,找到包含文本的数据块,并将它们转化为人类可读的...

    EMF 自学笔记5

    这些生成的代码可以用于存储、加载和操作模型实例。 #### 三、EMF代码生成 EMF提供了强大的代码生成能力,能够根据EMF模型自动生产Java代码。这包括模型类、序列化和反序列化代码、编辑器、视图等。EMF的代码生成...

    EMF读取XML

    - XML是一种标记语言,用于存储和传输结构化数据,它与EMF模型之间的映射使得XML数据能够被EMF理解和处理。 2. **创建EMF模型** - 使用EMF,首先需要创建一个Ecore模型,这是EMF的数据模型定义,包含了类、属性和...

    emf教程入门和插件

    EMF(Eclipse Modeling Framework)是Eclipse基金会推出的一个开源框架,主要用于构建基于模型的软件系统。它提供了一种统一的方式来表示、存储和操作复杂的结构化数据,是面向对象建模的强大工具。本教程旨在帮助...

    emf文件和wmf的转换

    EMF(Enhanced Metafile)和WMF(Windows Metafile)是两种常见的矢量图形文件格式,主要用于存储图像数据,特别是在Windows操作系统环境下。这两种格式都允许无损缩放和复杂图形的绘制,但EMF是WMF的增强版本,提供...

    SVG转EMF的示例代码

    EMF,另一方面,是Microsoft Windows操作系统中的一个元文件格式,它可以存储矢量和光栅图形信息,适合在Windows应用程序之间交换图形数据。 这个"SVG转EMF"的示例代码提供了在Java环境下进行这种转换的方法。首先...

    将EMF图片格式转换成PNG

    EMF (Enhanced Metafile) 是Windows操作系统中用于存储矢量图形和光栅图像的文件格式,它在处理复杂的图形和图像是非常有效。而PNG(Portable Network Graphics)则是一种无损压缩的位图格式,广泛应用于网页设计、...

    emf-runtime-2.7.2

    3. **持久化**:EMF支持模型的持久化,可以将模型数据存储为XML文件或其他格式。 4. **模型转换**:EMF提供了模型转换工具,允许在不同模型之间进行转换,增强了灵活性和互操作性。 5. **图形单元(Graphical User ...

    Emf2Png.zip

    EMF是一种矢量图形格式,通常在Windows系统中用于存储图形信息,而PNG是一种广泛使用的位图格式,支持透明度和无损压缩,常用于网页和其他数字媒体。 在C#编程环境下,进行这种图像格式转换通常需要利用.NET ...

    eclipse插件开发EMF api 文档

    3. **资源管理**:`Resource`接口是EMF中用于处理模型存储的关键,它可以加载和保存模型实例。`EObject.eResource()`方法可以获取对象所在的资源,而`Resource.load()`和`Resource.save()`则用于读写模型数据。 4. ...

    emf转bmp代码

    而位图则是像素图像,适用于存储照片或包含大量细节的图像。 描述中的“emf转bmpemf”可能是描述转换过程或者程序名,它强调了转换的核心操作。在这个过程中,我们需要利用编程语言(如C++)和相关的图形处理库来...

    eclipse的emf插件

    - **artifacts.jar**:通常存储插件的元数据,如依赖关系、版本信息等。 - **plugins**:此目录可能包含了多个Eclipse插件,EMF插件可能就是其中之一,每个插件都是一个独立的JAR文件,用于扩展Eclipse的功能。 - **...

    emf-runtime-2.6.1

    3. **序列化与反序列化**:EMF支持将模型实例序列化为标准的XMI格式,这是一种通用的模型交换格式,同时也支持直接存储为XML。 4. **API支持**:提供了一组丰富的API,允许开发者在程序中创建、操作和管理模型实例...

    java开发工具EMF插件

    此外,还可以生成XML序列化代码,使模型能够在持久化存储和传输中使用。 3. **模型操作**:EMF提供了丰富的API,包括创建、修改、查询模型对象,以及保存和加载模型到XML文件。 4. **图形化编辑器**:EMF集成了GEF...

    英文版微软EMF文件格式

    微软增强型元文件(Enhanced Metafile,简称EMF)是一种图形文件格式,主要用于在Windows操作系统中存储矢量图形和光栅图像数据。这种格式在1992年推出,作为Windows 3.x的Windows Metafile (WMF) 格式的升级版本,...

    打印监控 spl文件解析成emf文件

    EMF 文件则是一种更高级的矢量图形格式,它可以存储图形设备接口(GDI)调用,支持多种打印和绘图操作。与 SPL 文件相比,EMF 文件更易于读取和分析,适合用于打印监控目的,如跟踪打印作业、分析打印成本或实施打印...

    emf-xsd-Update-2.7.1

    2. **artifacts.jar**:通常存储项目的元数据和依赖项,它有助于构建系统识别和管理项目所依赖的其他库。 3. **features**:在Eclipse环境中,"features"目录通常包含XML文件,这些文件描述了EMF或GEF的功能集,包括...

Global site tag (gtag.js) - Google Analytics