2017-01-19 8 views
0

提供されたスキーマに基づいてXMLドキュメントを作成するために、MicrosoftのXMLGenライブラリを使用する関数を作成しようとしています。 For reference, I was trying to follow the project on this MSDN page.XMLサンプルジェネレータ - 型オブジェクトをキャストできません

私はプロジェクトをVisual Basicに翻訳してしまいました。コードは正常に構築されていますが、実行時に例外がスローされます。 "XmlWriter.Create()の間に 'System.Xml.XmlWellFormedWriter'型のオブジェクトをキャストできません

私はXmlWriter.Create()メソッドが新しいXmlWriterインスタンスを作成したと思っています。 XmlWellFormedWriterをキャストします。

Public Function CreateXmlFromSchema(sender As Object, e As EventArgs) Handles ToolStripMenuItem.Click   

    Dim fDialog As SaveFileDialog = New SaveFileDialog 
    fDialog.Filter = "XML Document (.xml)|*.xml" 

    If (fDialog.ShowDialog() = DialogResult.OK) Then 

     Dim xStringWriter As New StringWriter() 
     Dim xTextWriter As XmlTextWriter = New XmlTextWriter(xStringWriter) 

     Try 

      xTextWriter = XmlWriter.Create("myTextXML.xml") 

      xTextWriter.Formatting = Formatting.Indented 

      Dim xQualifiedName As XmlQualifiedName = New XmlQualifiedName("envelope", "mySchema.xsd") 

      Dim xSampleGen As XmlSampleGenerator = New XmlSampleGenerator("mySchema.xsd", xQualifiedName) 

      xSampleGen.WriteXml(xTextWriter) 

     Catch ex As Exception 
      MessageBox.Show(ex.Message) 
      MessageBox.Show("Stack Trace: " & vbCrLf & ex.StackTrace) 

     Finally 
      xTextWriter.Flush() 
      xTextWriter.Close() 

     End Try 

    End If 

    Return True 

End Function 

私は何がうまくいかないのか分かりませんが、何かすべての助けが大いに評価されます。

スキーマに基づいてXMLファイルを作成する方法が異なる場合は、私はすべて耳にします。私は、XMLライブラリを使って作業することは比較的新しいので、正式なトレーニングを受けていません。

+0

スキーマは本当に作家の一部である必要はありません。コードは有効な結果を生成する必要があります。したがって、生成後に検証するのが通常は十分です。ネットで書く方法はたくさんあります。実際のXMLがどのように見えるかのサンプルがありますか?投稿してください。 – jdweng

+0

私はXSDからXMLファイルを検証するのではなく、XSDドキュメントの詳細に基づいて空白からXMLを作成します。 – aberrantGeek

+0

他の方法を尋ねるので、Visual Studioはノードを右クリックしてXML Schema Explorerからサンプルを生成できます。 – MrGadget

答えて

0

あなたはXmlSampleGeneratorクラスを提供していませんでしたが、これはにStringWriterを使用しないことで、あなたの現在のエラーを過ぎてあなたを取得する必要があります:

Dim settings As New XmlWriterSettings 
settings.Indent = True 
Dim xTextWriter As XmlWriter = XmlWriter.Create("myTextXML.xml", settings) 

Dim xQualifiedName As XmlQualifiedName = New XmlQualifiedName("envelope", "mySchema.xsd") 

Dim xSampleGen As XmlSampleGenerator = New XmlSampleGenerator("mySchema.xsd", xQualifiedName) 

xSampleGen.WriteXml(xTextWriter) 
+0

申し訳ありませんが、XmlSampleGeneratorはMicrosoft.XMLライブラリです。そのため、リストされる必要はないと仮定しました。あなたの提案では、宣言で.Create()メソッドを使ってみましたが、同じエラーメッセージが表示されました。 – aberrantGeek

+0

NuGetでクラスを見つけました。実際には、私が敷設したXSDで動作します。 – MrGadget

+0

ああ、これは物事が働いている解決策でした。 xmlTextWriterをXmlTextWriterではなくXmlWriterとして宣言し、XmlSettingsを使用してXmlTextWriter.formattingクラスの代わりに書式設定を行うことが私の答えでした。本当にありがとう! – aberrantGeek

関連する問題