2009-04-30 32 views
5

この問題を解決するための最良の方法をご説明します。 xmlスキーマから空のテンプレートxmlを作成します。必要な要素と属性がすべて作成され、その値はすべて空の文字列になります。xsdから.NETでxmlファイルを作成する

次の手順は、特定のノードが持つことができる子xmlノードを特定する方法です。例えば。私は、その子の1つに対してminOccurs = "0"、maxOccurs = "unbounded"というノードを選択します。私はその子、その属性、名前、値の種類などについてすべてを判断することができます。

状況をより詳細に説明するために、私はxmlファイルをユーザーフレンドリーな設定。たとえば、「account db」ノードに新しいアカウントを追加すると、利用可能なノードがアカウントノードだけであることがわかります。次に、アカウントノードに子を追加しようとすると、名前ノード(必須)、パスワードノード(必須)、設定ノード(オプション)などの選択肢があります。その子どもたちの属性や設定は何ですか?

これは、.NET 2.0のC#2.0にあります。

要約すると、どのクラスを使用してスキーマを読み込み、解析してxmlを作成するための有益な情報を取得しますか?私の無礼なところでは、xsd自体がxmlであったので、私が通過できるDOMモデルがあるだろうという希望があった。

私はあなたがそのようなXMLSPY(link)などのサードパーティ製のツールを使用することができますので、などOxygenXml、VS、Xsd.exeでは、などの外部ツールを用いない

+1

[.NETのXSDスキーマからサンプルXMLドキュメントを生成するクラスはありますか?](http://stackoverflow.com/questions/41674/is-there-a-class-to-generate-a) -sample-xml-document-from-xsd-schema-in-net) –

答えて

1

これは、XMLインテリセンスの背後にある機能を、ほとんどの優れたXMLエディタで複製しているように思えます。すなわち、xmlスキーマを読んで、次にどの要素と属性が来るかを考えてください。

私たちはしばらく前に仕事をしていたプロジェクトで非常によく似たことをしました。ほとんどの時間に作用するものを生産するには、多くの仕事があります。製品には、常に働くものがたくさんあります。

基本的には、XSD(XmlSchemaオブジェクトを.netでロードする必要があります)をロードする必要があります。しかし、彼らが公開するSOMオブジェクトモデルは非常に未加工なので、それを解釈するにはかなりの労力が必要です。置換グループ、複合タイプ拡張、カメレオンスキーマ、ネームスペースなどの概念を無視すると、SOMを簡単にナビゲートすることができます。

次に、スキーマに関連してXML文書のどこにいるかを調べる必要があります。あなたがSOMにいることが分かれば、利用可能なオプションを見つけ出すことができます。

これを行うには、1,000行のコード行と4〜12週の作業が必要です。あなたは数週間で何か基本的なものを手に入れることができるかもしれませんか?

+0

これは私がこの作業を始めたときに私が発見したものです。このためのライブラリを作成するには、実際には何時間もかかるでしょう。私はXmlSchemaオブジェクトを横断して、この時点で必要な情報を取得して取得することを辞めました。 – ipwnponies

0

これは私のプログラムに限定されるようにしたいと思います。それはxsdからダミーのxmlを作り、逆もまた同様です。あなたがあなたのマシン上に存在する.NETツールを使って行うことができます

本当にラウンドアバウト(しかし無料)の方法は、エンティティを生成する(link)をXsd.exeではを用いることであろうあなたのスキーマは、以下のものを使用して定義されていることをオブジェクト:

xsd /classes /language:CS XSDSchemaFile.xsd 

オブジェクトがあるときは、プロジェクトにロードしてシリアル化します。いくつかのダミーデータを追加する場合は、プロパティなどを設定できます。

+0

申し訳ありませんが、これは私のプログラム内でのみ行われます。私が必要とした最も重要な情報は、必要な情報のスキーマを解析できるメソッドまたはクラスでした。 – ipwnponies

1

私はMSDNのドキュメントで目を覚ましています。私は香りを拾ったと思います。 XmlSchema.Readを使用してスキーマをロードし、コンパイルします。 Elementsプロパティには、「トップレベル」要素のコレクションが含まれます。ルート要素などの修飾名をハードコードする必要があります。それはそれです。私はどのように与えられたスキーマ要素の下で '内容'を見つけるか発見していない。

編集:私は行くいくつかの道を見つけましたが、それでもまだはっきりしていません。 XmlSchemaElementsにはスキーマタイプのプロパティがあります。これは単純か複雑かのどちらかです。 XMLスキーマの複合型は、属性、シーケンス、グループなどを持つことができます。シーケンスには、要素となるparticleというプロパティがあります。そして、このサイクルが繰り返されます。しかし、実装の難しい部分は、すべての可能なケース(単純型、複雑な型の属性、複雑な型の属性と要素、拡張子、全体のシバン)を確実にカバーすることです。

編集:XmlSchemaオブジェクトのElementプロパティを使用して、XmlSchemaElementを取得します。単純または複合型を取得するには、XmlSchemaElementのSchemaTypeプロパティを使用します。 XmlSchemaComplexTypeのAttributeプロパティを使用して属性を取得するか、ContentModelを使用して「シンプルコンテンツ」/「複合コンテンツ」または「パーティクル」を取得して「シーケンス」/「選択」/「すべて」を取得します。基本的に多くのプロパティをダウンして型をチェックし、オブジェクトを左右にキャストし、xsdオブジェクトのすべての可能な配置をチェックします。ライブラリを作成するには、長くて面倒でエラーが起こりやすいでしょう。これはXMLスキーマで、dtdsとは思っていても構いません。うわー、xmlスキーマは必要ですが、どうしてそんなに悪くなければならないのですか?

関連する問題