2012-03-08 96 views
2

我正在使用帶有XSD生成的ecore的EMF。現在我已經知道了生成的文件是無效的。 有2個原因:如何禁用文檔根的創建

  1. 有插入
  2. 這些屬性具有錯誤的大寫一個DocumentRoot的元件。

的事情是:它是不是模型的問題,它是保存過程Propblem(因爲在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,但在設置此選項時找不到任何參考。

回答

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);