Создать XSD- и XML-документ из набора данных, где xml ссылается на xsd Импортировать xml в Excel

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

Это отлично работает внутри визуальной студии, потому что я могу читать схему и документ, и он проверяет НО, созданный 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"))

person Jason Lee    schedule 16.03.2012    source источник


Ответы (1)


Вы можете добавить пространство имен в оба документа, установив свойство Namespace на вашем DataSetinstance:

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

Это приведет к тому, что ваша схема будет иметь целевое пространство имен:

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

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

<Sample xmlns="http://www.example.com/">
person DRH    schedule 07.04.2012