0

XMLファイル(スキーマによって検証されている)をデータセットの最初のデータテーブルに読み込もうとしています。これを実行し、プログラムにブレークポイントを設定すると、データテーブルに0行があることがわかります。なぜこれが起こっているのか理解できません...

コードサンプルは次のとおりです。

Public Sub GitRDone(ByVal sqlDT As DataTable)
        Dim ds As New DataSet
        Dim appPath As String = GetAppPath()
        Dim schemaFS As String = appPath & "blah.xsd"
        Dim xmlFS As String = appPath & "blah.xml"

        Try
            ds.Clear()
            ds.EnforceConstraints = False
            ds.ReadXmlSchema(schemaFS)
            ds.ReadXml(xmlFS)
            ds.Tables.Add(sqlDT)
        Catch e As Exception
            MsgBox(e.ToString())
        End Try
    End Sub

スキーマサンプル:

<xsd:schema id="HCR_EmployeesSchema" 
elementFormDefault="qualified" 
targetNamespace="http://www.tempuri.org/MyDataSet.xsd" 
xmlns="http://www.tempuri.org/MyDataSet.xsd" 
xmlns:xsd="http://www.w3.org/2001/XMLSchema" 
xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">          
<xsd:element name="Employees" msdata:IsDataSet="true">
    <xsd:complexType>
        <xsd:sequence>
            <xsd:element name="Employee">
                <xsd:complexType>
                    <xsd:sequence>
                        <xsd:element name="EmployeeID">
                            <xsd:simpleType>
                                <xsd:restriction base="xsd:string">
                                    <xsd:whiteSpace value="collapse"/>
                                </xsd:restriction>
                            </xsd:simpleType>
                        </xsd:element>
                          .....and on......
                      </xsd:sequence>
                    </xsd:complexType>
                </xsd:element>
            </xsd:sequence>
        </xsd:complexType>
    </xsd:element>
</xsd:schema>

XMLサンプル:

  <?xml version="1.0" encoding="utf-8"?>
    <Employees>
        <Employee>
            <EmployeeID>blah</EmployeeID>
         </Employee>
 </Employees>
4

2 に答える 2

1

ロジックに些細なエラーが必要です(おそらく、パラメーター-テーブル-sqlDt-データセットに追加しますが、空です-データセットには、逆シリアル化されて空ではない他のテーブルが含まれています)、シリアル化は期待どおりに機能します。サンプルコード(不完全なものを提供したため、スキーマなし):

using System;

namespace datasetXml
{
    static class Program
    {
        const string xml = 
@"<?xml version=""1.0"" encoding=""utf-8""?>
<Employees>
    <Employee>
        <EmployeeID>blah</EmployeeID>
    </Employee>
</Employees>";
        static void Main(string[] args)
        {
            var ds = new System.Data.DataSet();
            using (var sr = new System.IO.StringReader(xml))
                ds.ReadXml(sr);
            Console.WriteLine("rows in table: " + ds.Tables[0].Rows.Count);
        }
    }
}

上記のプログラムは出力を生成します:テーブルの行:1

于 2012-07-20T17:30:34.663 に答える
0

了解しました。わかりました。スキーマ属性を次の場所から変更する必要がありました。

<xsd:schema id="EmployeesSchema" 
elementFormDefault="qualified" 
targetNamespace="http://www.tempuri.org/MyDataSet.xsd" 
xmlns="http://www.tempuri.org/MyDataSet.xsd" 
xmlns:xsd="http://www.w3.org/2001/XMLSchema" 
xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">          

これに:

<?xml version="1.0" standalone="yes" ?>
<xsd:schema id="Employees" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema"
 xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">

ここでの根本的な問題は、xsd:schemaid属性が間違っていたことです。ありがとう

于 2012-07-20T18:02:13.327 に答える