我一直使用EMF三週。 我已經使用正在運行的Eclipse應用程序創建了我的元模型和一個實例。現在我的問題是,我有多個由運行的Eclipse實例保存的XMI文件,我想解析它們以創建處理xml文件中的數據的另一個文本文件。 爲此,我使用了EMF的XMIResource API,並且當我加載沒有與其他xmi文檔交叉引用的文件時,一切順利。但是,當我加載一個xmi文檔時,對其他xmi文檔進行交叉引用時,所有交叉引用都沒有在我的Java模型中正確保存。使用EMF加載多個xmi文件
我用這段代碼加載XMI文件:
XMIResource resourceInTy = new XMIResourceImpl(URI.createURI("file:/runtime-New_configuration/ApplicationInstance/instancesTypes.model"));
resourceInTy.load(null);
Environment env1 = (Environment) resourceInTy.getContents().get(0);
XMIResource resourceContRel = new XMIResourceImpl(URI.createURI("file:/runtime-New_configuration/ApplicationInstance/ContextRelations.model"));
resourceContRel.load(null);
Environment env2 = (Environment) resourceContRel.getContents().get(0);
env.setTypes(env1.getTypes());
env.setInstances(env1.getInstances());
env.setContextRelations(env2.getContextRelations());
正如你所看到的物體「環境」是所有的元模型的我的根對象應該包含所有的EList對象正確在解析xmi文件後設置。
這裏的問題是,在EList的「ContextRelations」內部應該有一個對稱爲「Parameter」的另一個對象的引用,該對象引用了對象Type。如果我嘗試檢索類型空引用出來! 我深深搜尋有關此問題的另一個問題,但最接近的一種,我發現了可以在此鏈接一個沒有回答的問題:Loading Multiple files using EMF resource load?
這裏有兩個XMI文件: ContextRelations.model
<parameters number="5">
<type href="instancesTypes.model#//@types.0"/>
</parameters>
<parameters number="6">
<type href="instancesTypes.model#//@types.4"/>
</parameters>
<contextRelations name="in"parameters="//@parameters.0//@parameters.1">
<initialComplexEvent href="Events.model#//@events.0"/>
<endingComplexEvent href="Events.model#//@events.1"/>
</contextRelations>
InstancesTypes.model
<types name="Emp"/>
<types name="Cam"/>
<types name="Comp"/>
<types name="Fi"/>
<types name="Loc"/>
<types name="St"/>
<types name="Read"/>
<instances name="Alice" type="//@types.0"/>
<instances name="r01" type="//@types.4"/>
<instances name="Bob" type="//@types.0"/>
<instances name="cctv1" type="//@types.1"/>
<instances name="doc" type="//@types.3"/>
<instances name="m1" type="//@types.2"/>
<instances name="m2" type="//@types.2"/>
<instances name="m3" type="//@types.2"/>
<instances name="nfc01" type="//@types.6"/>
<instances name="usb1" type="//@types.5"/>
次要問題:
正如你所看到的,我使用了三個根對象:env1和env2被用作臨時變量,將其內容放入主根對象(env)中。 我這樣做是因爲我不知道如何解析所有的xmi文件,同時創建一個根對象。
有人可以幫我嗎?