2017-01-19 1 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 스키마 탐색기에서 예제를 생성 할 수 있습니다. – 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

오,이 사람이 일하는 솔루션이었습니다. xTextWriter를 XmlTextWriter 대신 XmlWriter로 선언하고, XmlSettings를 사용하여 XmlTextWriter.formatting 클래스 대신 서식을 설정하는 것이 내 대답이었습니다. 무리 감사! – aberrantGeek

관련 문제