2010-02-15 20 views
1

問題: 使用VB.NET/C#,是否真的不可能在沒有重要工作的情況下讀取數據集中的以下XML?VB.NET可以讀取XML或不可以嗎?

我試圖

oDataSet.ReadXml(strFileName)<BR> 

Dim oDataSet As System.Data.DataSet = New System.Data.DataSet 
Dim strLocation As String = Environment.GetFolderPath(Environment.SpecialFolder.Desktop) 
strLocation += System.IO.Path.DirectorySeparatorChar + "filename.xml" 
oDataSet.ReadXml(strLocation) 

但是,這一切正在做的是把一個行與一個單元的內容在我的數據集 「2010-02-12T10:39:33」。 ..

這是推動我瘋了......

這是XML文件:

<?xml version="1.0" encoding="UTF-8"?> 
<dataroot generated="2010-02-12T10:33:39"> 
<Employee> 
    <MI_KZ>HKBZV</MI_KZ> 
    <MI_Name>Doe</MI_Name> 
    <MI_Vorname>John</MI_Vorname> 
    <MI_Nummer>70642860</MI_Nummer> 
    <MI_DatumVon>2010-02-11T10:45:37</MI_DatumVon> 
    <MI_DatumBis>2010-03-13T00:00:00</MI_DatumBis> 
    <AP_Bezeichnung>5-B-03</AP_Bezeichnung> 
    <KOE_Code>FHBM</KOE_Code> 
    <KST_Code></KST_Code> 
    <KST_Kurz><![CDATA[]]></KST_Kurz> 
    </Employee> 
    <Employee> 
    <MI_KZ>EX2FC</MI_KZ> 
    <MI_Name>Doe</MI_Name> 
    <MI_Vorname>Judith</MI_Vorname> 
    <MI_Nummer>70642680</MI_Nummer> 
    <MI_DatumVon>2010-02-10T14:12:56</MI_DatumVon> 
    <MI_DatumBis>2010-06-01T00:00:00</MI_DatumBis> 
    <AP_Bezeichnung>Gotth.</AP_Bezeichnung> 
    <KOE_Code>UEU</KOE_Code> 
    <KST_Code></KST_Code> 
    <KST_Kurz><![CDATA[]]></KST_Kurz> 
    </Employee> 
    <Employee> 
    <MI_KZ>EX0GW</MI_KZ> 
    <MI_Name>Testname</MI_Name> 
    <MI_Vorname>Testprename</MI_Vorname> 
    <MI_Nummer>70038630</MI_Nummer> 
    <MI_DatumVon>2004-05-11T00:00:00</MI_DatumVon> 
    <MI_DatumBis>2010-08-16T00:00:00</MI_DatumBis> 
    <AP_Bezeichnung>SempSee</AP_Bezeichnung> 
    <KOE_Code>KFMP</KOE_Code> 
    <KST_Code></KST_Code> 
    <KST_Kurz><![CDATA[]]></KST_Kurz> 
    </Employee> 
</dataroot> 
+1

是否有原因需要將其放入數據集中?爲什麼不將它反序列化爲Employee對象列表? –

+0

沒有,除了有一個導入數據的概述。 如果將XML讀入數據集,則不需要序列化類。 –

回答

6

數據集可以有多個表您知道...嘗試查看不同的表。

除此之外,ReadXml()方法是真正用於讀取與另一個數據集的WriteXml()方法寫出的XML。

要讀取任意 xml,您應該在示例xml文件中使用Visual Studio附帶的xsd.exe程序。這首先會爲你的xml創建一個* .xsd模式文件。然後在這個xsd模式文件中使用正確的選項再次運行該工具(對不起,此機器上沒有Visual Studio需要檢查),它將創建一個類型化數據集,C#類文件或VB.Net類文件您可以使用「反序列化」您的XML數據。

+0

哦,大聲笑,表1而不是0 ;-)) –

1

oDataSet.ReadXml需要XML具有特定的格式。嘗試將數據集保存到XML文件中。我相信,情況會有所不同。從XML中可以看到表名缺失。

+0

是的,我知道它會工作,如果它不是爲dataroot,但我不能改變我的XML導入... –

1

您的代碼沒有問題。讀取XML時,會將2個表導入數據集,數據庫和Employee表。

如果您在.ReadXML之後設置斷點,並將鼠標懸停在變量oDataset上並選擇打開數據集調試器可視化工具,則可以看到此內容。

alt text http://img21.imageshack.us/img21/3480/dataset.png

迭代通過Emplyee表:

For Each person As DataRow In oDataSet.Tables("Employee").Rows 
     MsgBox(person.Item("Mi_name")) 
    Next 
2

這取決於你所說的 「顯著工作」 是什麼。鑑於XML不符合預期的格式,我認爲它沒有做到你想做的是完全不合理的。但是,將原始XML轉換爲適當格式應該相當容易 - 可以使用XSLT,也可以通過將其讀入DOM,適當地移動所有內容,然後將其保存(可能存儲到內存)。我不會親自稱之爲「重要的工作」。

1

使用Linq to XML(.Net 3.5及更高版本)並且更容易 - 尤其是如果您使用VB .Net,因爲這具有XML Literals的附加優勢。

相關問題