<source id="4vppl"><ins id="4vppl"></ins></source>
<u id="4vppl"><sub id="4vppl"><label id="4vppl"></label></sub></u>
<object id="4vppl"></object>
  • <u id="4vppl"><li id="4vppl"><label id="4vppl"></label></li></u>

    <object id="4vppl"></object>
    <b id="4vppl"><sub id="4vppl"><tr id="4vppl"></tr></sub></b>

      <i id="4vppl"><thead id="4vppl"></thead></i>

      <thead id="4vppl"><li id="4vppl"><label id="4vppl"></label></li></thead>

      當前位置:首頁 > 網站舊欄目 > 學習園地 > 設計軟件教程 > EMF的存儲設置

      EMF的存儲設置
      2010-01-14 22:49:41  作者:  來源:
      一般我們在對EMF模型內容進行輸出,這里需要進行一些定制,下面是我在項目中做的一些定制,第一個是要將EMF Model輸出的xml中去掉一些名稱空間的信息,第二個就是希望把某些信息由Attribute類型轉換成Content類型,在得到的content類型的內容默認情況下會對<, >, &等字符進行轉換,這個也可以進行控制。借鑒EMF開發指南的做法,其實很簡單,這里要注意save和load使用的控制選項設置必須一致。
      具體做法如下,
      因為保存和加載xml是在XMLResourceImpl里面進行的,所以我們需要從該類繼承,overriding 相應的load和save方法,然后在使用到XMLResourceImpl的地方改成使用我們的派生之類,在定制的子類中,我們做了如下實現:
      java 代碼
       
      1. public void load(Map options) throws IOException {   
      2.     super.load(addOptions(options));   
      3. }   
      4.   
      5. public void save(Map options) throws IOException {   
      6.     super.save(addOptions(options));   
      7. }   
      8.   
      9. /**  
      10.  * 設置序列化/反序列化選項  
      11.  *   
      12.  * @param options  
      13.  */  
      14. private Map addOptions(Map options) {   
      15.     // 這里的map只應創建一次   
      16.     XMLResource.XMLMap xmlMap = new XMLMapImpl();   
      17.   
      18.     EPackage ePackage = Configuration.INSTANCE.getViewEPackage();   
      19.     XMLResource.XMLInfo info = new XMLInfoImpl();   
      20.     info.setXMLRepresentation(XMLResource.XMLInfo.CONTENT);   
      21.   
      22.     // 將event的內容在attribute和content之間轉換   
      23.     EClass eClass = (EClass) ePackage   
      24.             .getEClassifier(Configuration.EVENT_NAME);   
      25.     xmlMap.add(eClass   
      26.             .getEStructuralFeature(Configuration.EVENT_ATTRIBUTE_CONTENT),   
      27.             info);   
      28.   
      29.     // 在生成的ddxml中去掉namespace聲明   
      30.     xmlMap.setNoNamespacePackage(ePackage);   
      31.   
      32.     if (options == Collections.EMPTY_MAP) {   
      33.         options = new HashMap();   
      34.     }   
      35.        
      36.     options.put(XMLResource.OPTION_XML_MAP, xmlMap);   
      37.        
      38.     // 避免對<,>,&等字符進行轉換   
      39.     options.put(XMLResource.OPTION_SKIP_ESCAPE, Boolean.TRUE);   
      40.   
      41.     return options;   
      42. }  

       

      因為我們這里沒有對特殊字符進行轉換,所以我們需要在生成的content類型的內容加上<![CDATA, ]]>, 這個我們需要生成自己的XMLSaveImpl,然后overriding getContent(EObject o, EStructuralFeature[] features)這個方法:

      java 代碼
       
      1. protected String getContent(EObject o, EStructuralFeature[] features) {   
      2.     if (map == null)   
      3.     {   
      4.       return null;   
      5.     }   
      6.   
      7.     for (int i = 0; i < features.length; i++)   
      8.     {   
      9.       EStructuralFeature feature = features[i];   
      10.       XMLResource.XMLInfo info = map.getInfo(feature);   
      11.       if (info != null && info.getXMLRepresentation() == XMLResource.XMLInfo.CONTENT)   
      12.       {   
      13.         Object value = helper.getValue(o, feature);   
      14.         String svalue = getDatatypeValue(value, feature, false);   
      15.         if (toDOM)   
      16.         {               
      17.           Node text = document.createTextNode(svalue);   
      18.           currentNode.appendChild(text);   
      19.           handler.recordValues(text, o, feature, value);   
      20.         }else {   
      21.             // 將內容前后加上<![CDATA and ]]>   
      22.             svalue = "<![CDATA[\n" +svalue + "\n]]>";   
      23.         }   
      24.         return svalue;   
      25.       }   
      26.     }   
      27.     return null;   
      28. }   

       當然了還必須在前面自己的XMLResourceImpl類里面重載createXMLSave()方法:

       

       

      java 代碼
       
      1. protected XMLSave createXMLSave() {   
      2.     return new DoradoXMLSaveImpl(createXMLHelper());   
      3. }  

      安徽新華電腦學校專業職業規劃師為你提供更多幫助【在線咨詢
      相關熱詞搜索:存儲
      国产午夜福三级在线播放_亚洲精品成a人片在线观看_亚洲自慰一区二区三区_久久棈精品久久久久久噜噜
      <source id="4vppl"><ins id="4vppl"></ins></source>
      <u id="4vppl"><sub id="4vppl"><label id="4vppl"></label></sub></u>
      <object id="4vppl"></object>
    1. <u id="4vppl"><li id="4vppl"><label id="4vppl"></label></li></u>

      <object id="4vppl"></object>
      <b id="4vppl"><sub id="4vppl"><tr id="4vppl"></tr></sub></b>

        <i id="4vppl"><thead id="4vppl"></thead></i>

        <thead id="4vppl"><li id="4vppl"><label id="4vppl"></label></li></thead>
        一本大道香蕉久在热线29 | 夜夜爽一区二区 | 亚洲欧美日韩动漫在线观看 | 日韩精品在线第一页 | 亚洲91最新在线 | 中文一区二区三区欧美在线 |