如何禁用Document root的创建

时间:2012-03-08 13:32:43

标签: xsd eclipse-emf

我正在使用带有XSD生成的ecore的EMF。现在我有了问题,生成的文件无效。 有两个原因:

  1. 插入了DocumentRoot元素
  2. 属性的大小写错误。
  3. 问题是:这不是模型的问题,它是保存过程的问题(因为在EMF生成的编辑器中输出是正确的。

    首先是正确的结果:

    <?xml version="1.0" encoding="UTF-8"?>
    <model:widgetspecification xmlns:model="http://test.com/model" Description="DESC" Name="NAME">
      <model:Property Name="PROP1"/>
      <model:Property Name="PROP2/>
    </model:widgetspecification>
    

    实际结果:

    <?xml version="1.0" encoding="ASCII"?>
    <model:DocumentRoot xmi:version="2.0" xmlns:xmi="http://www.omg.org/XMI" xmlns:model="http://test.com/model">
      <widgetspecification description="DESC" name="NAME">
        <property name="PROP1"/>
        <property name="PROP2"/>
      </widgetspecification>
    </model:DocumentRoot>
    

    最后是保存程序(只输出到sysout)

    Resource resource = new XMIResourceImpl();
    resource.getContents().add(modelRoot);
    resource.save(System.out, Collections.EMPTY_MAP);
    

    可悲的是我在保存程序中找不到任何相关的差异(虽然EMF生成的代码当然要复杂得多) - 我想我可能错过了s.th.但我还没有找到任何东西)。 同样有趣的是,EMF生成的文件是UTF-8,但我找不到设置此选项的任何引用。

1 个答案:

答案 0 :(得分:2)

使用XMLResource代替XMIResource并将OPTION_EXTENDED_META_DATA设为true。

XMLResource resource = new XMLResourceImpl();
resource.setEncoding("UTF-8");
resource.getContents().add(modelRoot);
Map<Object, Object> options = new HashMap<>();
options.put(XMLResource.OPTION_EXTENDED_META_DATA, true);
resource.save(System.out, options);