DTDまたはXSDからサンプルXMLドキュメントを生成する方法


186

私たちは、大量のXML変換を伴うアプリケーションを開発しています。それ自体には適切な入力テストデータはありません。DTDまたはXSDファイルのみです。これらのファイルから自分でテストデータを生成したいと思います。それを行う簡単/無料の方法はありますか?

編集する

これには無料のツールがないようで、OxygenXMLはこれに最適なツールの1つであることに同意します。


8
私は、Q&A形式、または要請に適合しない、この質問についての回答を見ることができないdebate, arguments, polling, or extended discussion
MJN

回答:


29

Oxygen(http://www.oxygenxml.com/)もそれを行うと思いますが、それはもう1つの商用製品です。それは素晴らしいものですが、XMLの作業をたくさん行う人にはぜひお勧めします。Eclipseプラグインも付属しています。

私は、フル機能を備えた無料の30日間トライアルがあると確信しています。


私はたくさんのXSDを持っていますが、これはさまざまなXSDからスキーマを継承し、このXSDからテスト目的でXMLファイルを生成する必要があります。oxygenXMLを使用してこれを実行しようとしていますが、実行しようとしても機能しません。ルートノードを定義してくださいと書いてありますが、そうすることはできません。したがって、oxygenXMLで作業したことがある場合は、これを回避する方法を教えてください。
レイチェル

levelandに感謝します。これも私の質問に答えました!あなたが私の質問に答えに来て欲しい場合:stackoverflow.com/questions/7041388/…、私はあなたの答えを答えとしてマークさせていただきます。
エリックH

179

Visual Studio 2008 SP1以降では、XMLスキーマエクスプローラーはいくつかの基本的なサンプルデータを含むXMLドキュメントを作成できます。

  1. XSDドキュメントを開く
  2. XMLスキーマエクスプローラーに切り替える
  3. ルートノードを右クリックして、[Generate Sample Xml]を選択します。

Screenshot of the XML Schema Explorer


15
はい、これが最も簡単な方法です。XSDを開き、XMLスキーマエクスプローラーに切り替え、ルートノードを選択して右クリックし、[Generate Sample Xml]を選択します。
balint 2009

+1 @Sam Warwickと@balintに感謝します。これは本当に役に立ちました!
jessegavin、

3
これはVS2008で使用しましたが、VS2010では見つかりません。これがまだ存在していることを誰かが確認できますか?
Simon

Simonと同じ:VS2010でもこれを見つけることができません。MSDNによると、それはまだそこにあるはずですが、UIのどこにも表示されません... :-(
Martijn

6
@Simon:スキーマエクスプローラーで要素の1つを右クリックすると、「サンプルXMLの生成」のみが表示されます。要素は、緑色の左/右山かっこ「<>」を使用してグラフィカルに表示されます。おそらくタイプを右クリックしていて、生成メッセージは要素に対してのみ生成します(これは理にかなっています)。
ミゲルセビリア

126

無料でオープンソースのEclipseの最近のバージョン IDEの DTDおよびXSDファイルからXMLドキュメントを生成できます。指定された* .dtdまたは* .xsdファイルを右クリックし、[生成-> XMLファイル...]を選択します。生成するルート要素と、オプションの属性と要素を生成するかどうかを選択できます。

もちろん、Eclipseを使用してDTDおよびXSDスキーマファイルを作成および編集することもできます。また、プラグインをインストールする必要はありません。標準ディストリビューションに含まれています。


ありがとう!Eclipseは無料で、これは完璧なソリューションでした。
Akku

皆さんはたまたま、Eclipse機能がこの機能を提供していることを知っていますか?私の「生成」サブメニューには、「JAXBクラス」しかありません。
otto.poellath 2011年

9
これらのオプションを取得するには、Webツールプロジェクトをインストールする必要があります([ヘルプ]-> [新しいソフトウェアのインストール]を参照)。
2011年

3
Eclipseは良いオプションのようですが、インポートされたXSDを追跡する世代を取得できませんでした。たとえば、3つの要素を記述するXSDがあり、そのうちの1つが参照/インポートされたXSDで定義されたcomplexTypeである場合、その要素に対して生成されません。何か案は?
David Hergert、2011

@DavidHergert簡単な回避策は、スタブ型を生成することです。
Adam Matan 2013

32

Intellij Ideaユーザーの場合:

ツール-> XMLアクションをご覧ください

ここに画像の説明を入力してください

(私がテストした限り)非常にうまく機能しているようです。

編集:

@naXaで述べたように、XSDファイルを右クリックして[XSDスキーマからXMLドキュメントを生成...]をクリックすることもできます。


生成する要素の数を指定する方法はありますか(シーケンス用)?
Nikita

私はこのスレッドのすべてのソリューションをテストし、これが最も
FLX

1
インポートが多いXSDを使用する最新のRubyMine(v。7.0、Intellij Ideaベース)では、私には機能しません。エラーメッセージしか表示されません。
Envek 2014年

3
「スキーマコンパイルエラー」?
赤エンドウ

1
新しいバージョンでは、XSDを右クリックし、[XSDスキーマからXMLドキュメントを生成...]を選択します
naXa

12

Sourceforge.netで利用可能なカムプロセッサは、XSDのxmlテストケースを生成します。独自のテスト例を生成する方法を示すチュートリアルがあります-ランダムなジャンクなものだけでなく、コンテンツヒントを使用して現実的な例を確実にすることを含みます。

チュートリアルはこちらから入手できます:http : //www.oasis-open.org/committees/download.php/29661/XSD%20and%20jCAM%20tutorial.pdf

また、OASISコンテンツアセンブリメカニズム(CAM)標準を使用してXSDをよりXSLTに適した構造にリファクタリングするツールの詳細については、リソースWebサイト(http://www.jcam.org.uk)を参照してください。

お楽しみください、DW


3
Sourceforge.netダウンロードへの直接リンクは、sourceforge.net

@Pyderman-それはあなたの設定です-それらを変更する方法を調べてください。
Ghoti 2017年

10

Sun / Oracle Multi-Schema Validatorの一部であるXMLインスタンスジェネレーターを使用できます。

それはREADME.txtの状態です:

Sun XML Generatorは、さまざまな種類のスキーマからさまざまなXMLインスタンスを生成するJavaツールです。DTD、RELAX名前空間、RELAXコア、TREX、およびW3C XMLスキーマパート1のサブセットをサポートします。[...]

これは、スキーマから有効なインスタンスと無効なインスタンスの両方を生成できるコマンドラインツールです。特定のスキーマに準拠する必要があるXMLアプリケーションのテストケースを生成するために使用できます。

msvダウンロードページxmlgen.zipからダウンロードして解凍し、次のコマンドを実行して詳細な使用方法を取得します。

java -jar xmlgen.jar -help

このツールはBSDライセンスの下でリリースされているようです。ここからソースコードにアクセスできます


非常に素晴らしい!ただし、少し制限があります。他のXSDをインポートするXSDで試してみましたが、失敗しました。しかし、DTDでは非常にうまく機能します。ありがとう!
lindelof、2009年

1
現在のリンク:ホームページダウンロード。ディレクトリxmlgen.zip内のみnigthly。xsdからサンプルを生成できないことを確認しました。
Jarekczek 2012

私の場合、--exampleファイルを使用して、新しいサンプルファイルの生成に使用できるトークンを含める必要がありました。サンプルを取ってサンプルを作る!簡単ではない...
2016年

java.netリンクは基本的に無効です。
RedGrittyBrick 2017年

10

XMLSpyはあなたのためにそれを行いますが、それは無料ではありません...

私はと考えていた液体のXml Studioはあなたのためにそれを行い、自由ですが、私は個人的にテストデータを作成するためにそれを使用していません。


それが何かを生成していますが、それ以上の多くのコントロールを持っていない:あなたはトップレベルの要素といくつかの一般的なオプションを選択することができますが、その他の変種の多くでテストケースのセットを生成するためのXMLSpyを使用することはできません
ハンス・ペーター・ストー

XMLSpyは問題ないように見えましたが、生成されたxmlは、生成に使用されたxsdに対して検証できませんでした。不合格。それはまた、postiveintegerフィールドでバーフィングしました- *ERROR*その代わりに入れました
Tim Abell

7

これまで誰も質問に答えることができなかったようです:)

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);

7

こちらのhttp://www.wmhelp.com にあるXMLPad(無料で使用可能)を使用して、xmlサンプルを生成することもできます。メニューから:XSD->サンプルXMLファイルを生成します。


「サンプルデータの生成」を選択すると、スタックオーバーフローまたは「WMHelp XmlPadが機能しなくなりました」
Red Pea

5

マイクロソフトは、サンプルとして「ドキュメントジェネレータ」ツールを公開しています。 これは、サンプルアプリのアーキテクチャと操作を詳細に説明した記事です。

サンプル生成ツールを実行するだけの場合は、ここをクリックしてMSIをインストールしてください

それは無料です。ソースが利用可能です。実行するには.NET Frameworkが必要です。XSDでのみ機能します。(リラックスNGまたはDTDではありません)。


上記のリンクは、MSDNの「XMLスキーマからのXMLドキュメントの生成」という記事へのリンクです
Sam Warwick

インストーラーがマシンにC#コードの束をドロップします。それらをLinqPadにダンプするだけで、無料のXMLインスタンスジェネレーターが手に入ります。タダー!
Sean Kearon、2011

9年後、これはまだXSDに最適です。
ミカニカル2018

5

XML-XIG:XMLインスタンスジェネレーター

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

このオープンソースは役に立ちます。


1
あまりユーザーフレンドリーではありません。たくさんの例外を投げます、説明がつかないのでそれを機能させることができませんNullPointerException
Jarekczek 2012

4

Microsoft Officeには「InfoPath」があり、これはXSDをインポートとして取り、XMLファイルを作成するためのフォームベースのエディターをすばやく簡単に定義できます。これには2つのモードがあります。1つはフォームを定義するモードで、もう1つはフォームに入力してXMLファイルを作成するモードです。私はそれが最初にOffice 2003に付属していたと思います、そしてほとんどの人はそれをインストールすることはありません。どれだけ気に入ったかにショックを受けます。


1

XMLBlueprint 7.5は以下を実行できます。-dtdからサンプルxmlを生成-relax ngスキーマからサンプルxmlを生成-xmlスキーマからサンプルxmlを生成


1

SoapUIのオープンソースバージョンは、WSDL(XSDタイプ定義を含む)からSOAPリクエストを生成できるため、この機能のオープンソース実装があるように見えます。残念ながら、これに慣れているライブラリはわかりません。


1

Liquid XML Studioには、XMLスキーマからサンプルXMLファイルを構築するXMLサンプルジェネレータウィザードがあります。結果のデータはスキーマに準拠しているようです(正規表現パターンのデータを生成できません)。

XSDからXMLサンプルを生成する


0

OpenXSDのライブラリは、彼らがXSDに基づいてXMLインスタンスを生成するためのサポートを持っていることを言及しています。それをチェックしてください。


使用例を投稿していただけますか?
naXa 2018年



弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.