2009-09-30 108 views
3

在最新版本的免費和開源Eclipse IDE中,您可以從DTD和XSD文件生成XML文檔。右鍵單擊給定的* .dtd或* .xsd文件並選擇「生成 - > XML文件...」。您可以選擇要生成的根元素以及是否應生成可選的屬性和元素。xsd與eclipse的無頭xml生成

我可以使用這個無頭(無日食)嗎?

回答

3

您可以創建一個無頭RCP應用程序,其中只包含執行實際生成所需的插件。這些主要是WTP插件以及管理擴展點等所需的一些核心插件。

可以從命令行運行RCP應用程序,並傳遞用於從中生成的模式的參數和輸出文件名。它缺少生產實施中可能需要的許多驗證,但會告訴你如何完成。 它還將字符集硬編碼爲UTF-8,您可以擴展參數處理以使其成爲可選參數或其他內容。

下面的代碼片段可以合併到一個新的無頭RCP應用程序中。要創建RCP應用程序,首先創建一個新的插件項目:

  • 右鍵單擊 - >新建 - >其他...->插件開發 - >插件項目,選擇下一頁
  • 爲項目輸入一個名稱(如name.seller.rich.xmlgen),然後選擇下一頁
  • 取消選中這個插件會做出貢獻的UI並選擇富客戶端申請ication然後單擊完成
  • 添加所需的依賴,雙擊META-INF/MANIFEST.MF,並選擇依賴編輯器選項卡中添加以下插件到需要的插件節(點擊添加...並添加各一個)
    • org.eclipse.core.runtime,
    • org.eclipse.core.resources;捆綁版本= 「3.5.0」,
    • 組織.eclipse.wst.common.uriresolver; bundle-version =「1.1.301」,
    • org.eclipse.wst.sse.core;捆綁版本= 「1.1.400」,
    • org.eclipse.wst.xml.core;捆綁版本= 「1.1.400」,
    • 有機.eclipse.wst.xml.ui;捆版本= 「1.1.0」,
    • IBM模式組件Java;捆綁版本= 「2.5.0」,
    • com.ibm.icu;捆綁版本=「4.0.1」,
    • org.eclipse.wst.xsd.core; bundle-version =「1.1。401" ,
    • org.eclipse.wst.xsd.ui;束版本= 「1.2.204」,
    • org.eclipse.emf.ecore;捆綁版本= 「2.5.0」
  • 在該項目中,你應該看到一個Application類,複製下面的Java內容到Application源(和進口文件的頂部)的start()方法

    進口java.io.ByteArrayOutputStream中。 import java.io.File; import java.io.FileInputStream; import j ava.io.FileOutputStream; import java.io.FileWriter; import java.net.URI; import java.net.URL;

    import org.eclipse.core.internal.utils.FileUtil; import org.eclipse.core.runtime.Platform; import org.eclipse.emf.ecore.plugin.EcorePlugin; import org.eclipse.equinox.app.IApplication; import org.eclipse.equinox.app.IApplicationContext; import org.eclipse.wst.xml.core.internal.contentmodel.CMDocument; import org.eclipse.wst.xml.ui.internal.wizards.NewXMLGenerator;

    public Object start(IApplicationContext context)throws Exception { String [] args = Platform.getCommandLineArgs();

    String schemaFileName = args[0];// e.g. "C:\test\test.xsd" 
    String xmlFileName = args[1];// e.g. "C:\test\test.xml" 
    String rootName = args[2];//"myTestRoot"; 
    String charsetName = "UTF-8"; 
    
    try { 
        //get the URI as a full URL path 
        URI schemaUri = new File(schemaFileName).toURI(); 
        schemaFileName = schemaUri.toURL().toString(); 
    
        //TODO handle any errorInfo set into this array 
        String[] errorInfo = new String[2]; 
        CMDocument cmDocument = NewXMLGenerator.createCMDocument(schemaFileName, 
          errorInfo); 
        NewXMLGenerator generator = new NewXMLGenerator(schemaFileName, 
          cmDocument); 
    
        generator.setRootElementName(rootName); 
    
        ByteArrayOutputStream out = generator.createXMLDocument(xmlFileName, 
          charsetName); 
    
        //output the content to the file. 
        File outFile = new File(xmlFileName); 
    
        outFile.getParentFile().mkdirs(); 
    
        FileWriter writer = new FileWriter(outFile); 
    
        writer.write(out.toString(charsetName)); 
    
        writer.flush(); 
        writer.close(); 
    } catch (Exception e) { 
        // TODO Auto-generated catch block 
        e.printStackTrace(); 
    } 
    
    return IApplication.EXIT_OK; 
    

    }

要創建一個獨立的應用程序,您還需要創建一個產品配置

  • 右鍵單擊 - >新建 - >其他...->插件開發 - >產品配置
  • 選擇RCP插件項目
  • 在文件名稱中輸入配置:場單擊完成。
  • 在config.product編輯器ID,版本和名稱字段中輸入一些合適的值(它們並不重要,因爲它是無頭的產品)。
  • 產品定義部分,選擇新建...旁邊的產品按鈕:場,默認值應罰款(仔細檢查定義插件是你的RCP插件) ,選擇確定
  • 保存產品

現在,您需要導出RCP應用程序。

  • 右鍵單擊項目 - >導出... - >插件開發 - > Eclipse的產品
  • 輸入應用程序的目標目錄,並選擇OK

您現在應該有一個獨立的應用程序,你可以調用,就像任何其他應用程序,傳遞命令行參數以從模式生成XML文件。

預期參數,依次爲:

  • 到架構完全合格的路徑,從
  • 要創建的文件(父目錄也將被創建)的完全限定名稱生成。
  • 根元素名稱(與嚮導中的相同,這是您要在下面生成內容的元素的名稱)。

注意這個過程只會從單個模式的文件,如果你的架構引用其他模式將當前失敗。可以擴展進程以獲取列出所有引用的模式位置的屬性文件,並將這些文件解析爲目錄貢獻,以便進程可以解析模式。一些關於如何以及爲什麼你會這樣做的說明。
如果我有機會,我會考慮實施這個並相應地更新我的答案。


例如,如果您有一個Spring模式,您可能希望在模式文件中包含各種Spring名稱空間模式。在Eclipse中,Catalog貢獻提供了將這些模式ID映射到模式文件位置的方法,以便可以對其進行分析。如果您有插件,可以將它們與應用程序捆綁在一起並定義目錄貢獻(請參閱help以獲取貢獻指標)。

如果您沒有可用的目錄庫貢獻,該過程將改爲在屬性文件中定義鍵值對以引用驅動器上的模式位置。

示例內容:

http://www.springframework.org/schema/beans=c:\\schema\\spring-beans.xsd 
http://www.springframework.org/schema/tool=c:\\schema\\spring-tool.xsd 
+0

這真的很棒,謝謝你的努力。我希望你喜歡賞金:) – codevour 2009-10-09 07:26:20

+0

非常感謝,並很樂意提供幫助。如果您有任何問題,請告訴我。我唯一的「問題」是,因爲你在當天早些時候接受了,所以在回答任何問題之前,我可能會達到限制。如果它在一天結束時被接受,我可以獲得額外的免費積分。哦,至少我今天可能會出去吃午飯...... – 2009-10-09 10:10:30

0

你見過this question?它並沒有專門提到無頭環境,但它非常相似。其中一個suggestions是Sun XMLGenerator工具。我嘗試了它,它像魅力一樣工作。

+0

謝謝。不幸的是,生成器無法爲日期數據類型生成值。是否有可能生成沒有數據的XML?那麼字符串是空的? – codevour 2009-10-06 06:30:55