2012-03-08 7 views
2

XSDで生成されたecoreでEMFを使用しています。今、私は、生成されたファイルが有効ではないということを知っています。ドキュメントルートの作成を無効にする方法

  1. は属性が間違った総額を持って
  2. 挿入DocumentRootの要素があります: は2つの理由があります。

事がある:それは、モデルの問題ではありませんEMF発生したエディタで出力が正確であることから、それは保存処理のPropblem(ある

まず正しい結果:。

<?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

XMIResourceの代わりにXMLResourceを使用し、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); 
関連する問題