2017-04-18 92 views
0

我一直使用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文件,同時創建一個根對象。

有人可以幫我嗎?

回答