Создайте документ XSD и XML из набора данных, где xml ссылается на xsd. - PullRequest
0 голосов
/ 16 марта 2012

Длинное название, но, надеюсь, я смогу объяснить, что я хочу.Я прочитал и погуглил тонну XML-документации, но так и не получил ответа на то, что я пытаюсь сделать.Я пытаюсь создать документ XSD, который генерирует явные определения типов для полей в наборе данных.Затем я пытаюсь создать образец XML-документа, который проверяется на соответствие XSD-документу.

Это прекрасно работает в Visual Studio, потому что я могу читать в схеме и документе, и это проверяет НО, созданный документ XML не имеет реальной ссылки на XSD через xlmns или другой метод.Если я хочу использовать эти XML-данные, скажем, в MS Excel, и пытаюсь импортировать, он не знает, где проверять XSD, поэтому он принимает его на основе значений.Есть ли способ в моем коде добавить xlmns как в XSD, так и в XML, если это необходимо для решения этой проблемы?

 Dim MyDataSet As New DataSet("Samples")

    Dim MyDataTable As New DataTable("Sample")

    MyDataSet.Tables.Add(MyDataTable)

    MyDataTable.Columns.Add(New DataColumn("blnExample", GetType(Boolean), Nothing, MappingType.Element))
    MyDataTable.Columns.Add(New DataColumn("datExample", GetType(DateTime), Nothing, MappingType.Element))
    MyDataTable.Columns.Add(New DataColumn("decExample", GetType(Decimal), Nothing, MappingType.Element))
    MyDataTable.Columns.Add(New DataColumn("dblExample", GetType(Double), Nothing, MappingType.Element))
    MyDataTable.Columns.Add(New DataColumn("intExample", GetType(Integer), Nothing, MappingType.Element))
    MyDataTable.Columns.Add(New DataColumn("lngExample", GetType(Long), Nothing, MappingType.Element))
    MyDataTable.Columns.Add(New DataColumn("sglExample", GetType(Single), Nothing, MappingType.Element))
    MyDataTable.Columns.Add(New DataColumn("strExample", GetType(String), Nothing, MappingType.Element))

    ' Write out the XSD

    MyDataSet.WriteXmlSchema(Server.MapPath("~\xml\MySchema.xsd"))

    ' Put some data in the table
    Dim TempRow As DataRow

    For i As Integer = 1 To 3

        TempRow = MyDataTable.NewRow()
        TempRow("blnExample") = True
        TempRow("datExample") = New DateTime(2012, 2, 29)
        TempRow("decExample") = 1
        TempRow("dblExample") = 2
        TempRow("intExample") = 3
        TempRow("lngExample") = 4
        TempRow("strExample") = "Example"
        MyDataTable.Rows.Add(TempRow)
    Next
    ' Write out the data        

    MyDataSet.WriteXml(Server.MapPath("~\xml\MyData.xml"))

1 Ответ

0 голосов
/ 08 апреля 2012

Вы можете добавить пространство имен к обоим документам, установив свойство Namespace в своем экземпляре DataSet:

MyDataSet.Namespace = "http://www.example.com/"

В результате ваша схема получит целевое пространство имен:

<xs:schema targetNamespace="http://www.example.com/" ... >

и ваш экземпляр документа, ссылающийся на это пространство имен:

<Sample xmlns="http://www.example.com/">
...