代码之家  ›  专栏  ›  技术社区  ›  Stefan Steiger Marco van de Voort

vb.net能读取XML吗?

  •  1
  • Stefan Steiger Marco van de Voort  · 技术社区  · 16 年前

    问题: 使用vb.net/c,如果没有大量的工作,是否真的不可能在数据集中读取下面的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:33:39”的单元格…

    这让我发疯了…

    这是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>
    
    5 回复  |  直到 16 年前
        1
  •  6
  •   Joel Coehoorn    16 年前

    数据集可以有多个表,您知道…试着看另一张桌子。

    除此之外, ReadXml() 方法实际上是用于读取用另一个数据集的 WriteXml() 方法。

    阅读 任意的 XML,您应该在示例XML文件上使用与Visual Studio一起提供的xsd.exe程序。第一步将为XML创建一个*.xsd模式文件。然后在此XSD架构文件上使用正确的选项再次运行该工具(很抱歉,此计算机上没有要检查的Visual Studio),它将创建一个类型化数据集、C类文件或VB.NET类文件,您可以使用该文件“反序列化”XML数据。

        2
  •  2
  •   Jon Skeet    16 年前

    这取决于你所说的“重要工作”是什么意思。考虑到XML不是预期的格式,我认为它不做您想要它做的事情一点都不合理。但是,将原始XML转换为适当的格式应该非常容易——要么使用XSLT,要么将其读取到DOM中,适当地转移所有内容,然后将其保存(可能保存到内存中)。我个人不会称之为“重要的工作”。

        3
  •  1
  •   Kangkan    16 年前

    这个 oDataSet.ReadXml 需要XML采用特定的格式。尝试将数据集保存到XML文件中。我相信,会有所不同的。从XML中,可以看到缺少表名。

        4
  •  1
  •   Stefan    16 年前

    您的代码没有问题。当您读取XML时,它将2个表导入到数据集、dataroot和employee表中。

    如果在.readxml之后设置断点,并将鼠标悬停在变量odataset和shoose上以打开数据集调试器可视化工具,则可以看到此情况。

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

    遍历employe表:

        For Each person As DataRow In oDataSet.Tables("Employee").Rows
            MsgBox(person.Item("Mi_name"))
        Next
    
        5
  •  1
  •   Brett Rigby    16 年前

    使用linq-to-xml(.net 3.5及更高版本)会更容易,尤其是在使用vb.net的情况下,因为这增加了XML文本的优势。