簡體   English   中英

如何從 DTD 或 XSD 生成示例 XML 文檔?

[英]How to generate sample XML documents from their DTD or XSD?

我們正在開發一個涉及大量 XML 轉換的應用程序。 我們本身沒有任何適當的輸入測試數據,只有 DTD 或 XSD 文件。 我們想從這些文件中自己生成我們的測試數據。 有沒有簡單/免費的方法來做到這一點?

編輯

顯然沒有免費的工具,我同意 OxygenXML 是最好的工具之一。

在 Visual Studio 2008 SP1 和更高版本中, XML Schema Explorer可以使用一些基本示例數據創建 XML 文檔:

  1. 打開您的 XSD 文檔
  2. 切換到 XML 架構資源管理器
  3. 右鍵單擊根節點並選擇“生成示例 Xml”

XML 架構資源管理器的屏幕截圖

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

當然,您也可以使用 Eclipse 創建和編輯 DTD 和 XSD 模式文件。 而且您不需要安裝任何插件。 它包含在標准發行版中。

對於 Intellij Idea 用戶:

看看工具 -> XML 操作

在此處輸入圖片說明

似乎工作得很好(據我測試)。

編輯:

正如@naXa 所提到的,您現在還可以右鍵單擊 XSD 文件,然后單擊“從 XSD 架構生成 XML 文檔...”

我認為 Oxygen ( http://www.oxygenxml.com/ ) 也是如此,但那是另一種商業產品。 不過,這是一個不錯的方法……我強烈建議任何從事大量 XML 工作的人使用它。 它也帶有一個不錯的 Eclipse 插件。

我相信有一個免費的、功能齊全的 30 天試用版。

Sourceforge.net 上可用的 camprocessor 將為任何 XSD 生成 xml 測試用例。 有一個教程可以向您展示如何生成自己的測試示例 - 包括使用內容提示來確保真實的示例,而不僅僅是隨機的垃圾示例。

該教程可在此處獲得: http : //www.oasis-open.org/committees/download.php/29661/XSD%20and%20jCAM%20tutorial.pdf

有關該工具的更多信息 - 該工具使用 OASIS 內容組裝機制 (CAM) 標准將 XSD 重構為對 XSLT 更友好的結構 - 可以從資源網站 - http://www.jcam.org.uk 找到

享受,DW

XMLSpy為你做這件事,雖然那不是免費的......

我相信Liquid Xml Studio會為您完成並且是免費的,但我個人沒有使用它來創建測試數據。

您可以使用 XML Instance Generator,它是Sun/Oracle Multi-Schema Validator 的一部分

它的 README.txt 聲明:

Sun XML Generator 是一個 Java 工具,用於從多種模式生成各種 XML 實例。 它支持 DTD、RELAX Namespace、RELAX Core、TREX 和 W3C XML Schema Part 1 的一個子集。 [...]

這是一個命令行工具,可以從模式生成有效和無效的實例。 它可用於為需要符合特定模式的 XML 應用程序生成測試用例。

msv下載頁面下載並解壓xmlgen.zip ,運行以下命令獲取詳細使用說明:

java -jar xmlgen.jar -help

該工具似乎是在 BSD 許可下發布的; 源代碼可以從這里訪問

您還可以使用XMLPad(免費使用),在這里找到http://www.wmhelp.com生成你的XML樣本。 從菜單:XSD -> 生成示例 XML 文件。

到目前為止似乎沒有人能夠回答這個問題:)

我使用 EclipseLink 的 MOXy 動態生成綁定類,然后遞歸遍歷綁定類型。 它有點重,但是一旦對象樹被實例化,它就允許 XPath 值注入:

InputStream in = new FileInputStream(PATH_TO_XSD);
DynamicJAXBContext jaxbContext = 
            DynamicJAXBContextFactory.createContextFromXSD(in, null, Thread.currentThread().getContextClassLoader(), null);
DynamicType rootType = jaxbContext.getDynamicType(YOUR_ROOT_TYPE);
DynamicEntity root = rootType.newDynamicEntity();
traverseProps(jaxbContext, root, rootType, 0);

TraverseProps 是一個非常簡單的遞歸方法:

private void traverseProps(DynamicJAXBContext c, DynamicEntity e, DynamicType t, int level) throws DynamicException, InstantiationException, IllegalAccessException{
        if (t!=null) {
            logger.info(indent(level) + "type [" + t.getName() + "] of class [" + t.getClassName() + "] has " + t.getNumberOfProperties() + " props");
            for (String pName:t.getPropertiesNames()){
                Class<?> clazz = t.getPropertyType(pName);
                logger.info(indent(level) + "prop [" + pName + "] in type: " + clazz);
                //logger.info("prop [" + pName + "] in entity: " + e.get(pName));

                if (clazz==null){
                    // need to create an instance of object
                    String updatedClassName = pName.substring(0, 1).toUpperCase() + pName.substring(1);
                    logger.info(indent(level) + "Creating new type instance for " + pName + " using following class name: " + updatedClassName );
                    DynamicType child = c.getDynamicType("generated." + updatedClassName);
                    DynamicEntity childEntity = child.newDynamicEntity();
                    e.set(pName, childEntity);
                    traverseProps(c, childEntity, child, level+1);
                } else {
                    // just set empty value
                    e.set(pName, clazz.newInstance());
                }
            }
        } else {
            logger.warn("type is null");
        }
    }

將所有內容轉換為 XML 非常簡單:

Marshaller marshaller = jaxbContext.createMarshaller();
marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true);
marshaller.marshal(root, System.out);

XML-XIG:XML 實例生成器

http://xml-xig.sourceforge.net/

這個開源會很有幫助。

Microsoft 發布了一個“文檔生成器”工具作為示例。 這篇文章比較詳細地描述了示例應用程序的架構和操作。

如果您只想運行示例生成工具, 請單擊此處並安裝 MSI。

免費。 來源是可用的。 需要 .NET Framework 才能運行。 僅適用於 XSD。 (不是放松 NG 或 DTD)。

Microsoft Office 有“ InfoPath ”,它將 XSD 作為導入,讓您快速輕松地定義基於表單的編輯器來創建 XML 文件。 它有兩種模式——一種是定義表單,另一種是通過填寫表單來創建 XML 文件。 我相信它最初是隨 Office 2003 一起提供的,而且大多數人從未安裝過它。 它讓我震驚,我有多喜歡它。

XMLBlueprint 7.5 可以執行以下操作: - 從 dtd 生成示例 xml - 從relax ng 模式生成示例 xml - 從 xml 模式生成示例 xml

Liquid XML Studio 有一個XML Sample Generator向導,它將從 XML 模式構建示例 XML 文件。 結果數據似乎符合模式(它只是無法為正則表達式模式生成數據)。

從 XSD 生成 XML 示例

SoapUI 的開源版本可以從 WSDL(其中包含 XSD 類型定義)生成 SOAP 請求,因此看起來有此功能的開源實現。 不幸的是,我還沒有弄清楚哪個庫習慣於此。

為了完整起見,我將添加http://code.google.com/p/jlibs/wiki/XSInstance ,這是在一個類似(但特定於 Java)的問題中提到的:任何 Java“API”從 XSD 生成示例 XML?

XML Blueprint 也這樣做; 說明在這里

http://www.xmlblueprint.com/help/html/topic_170.htm

它不是免費的,但有 10 天的免費試用期; 看起來又快又高效; 不幸的是,它僅適用於 Windows。

還有http://xsd2xml.com/ ,一個在線 XSD 到 XML 生成器

OpenXSD庫提到他們支持基於 XSD 生成 XML 實例。 檢查出。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM