vb.Net:如何快速读取大型XML文件?

时间:2010-03-16 21:40:28

标签: vb.net

我正在尝试阅读this XML文档。

摘录:

<datafile xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="wiitdb.xsd"> 
    <WiiTDB version="20100217113738" games="2368"/>     
        <game name="Help Wanted: 50 Wacky Jobs (DEMO) (USA) (EN)"> 
            <id>DHKE18</id> 
            <type/> 
            <region>NTSC-U</region> 
            <languages>EN</languages> 
            <locale lang="EN"> 
                <title>Help Wanted: 50 Wacky Jobs (DEMO)</title> 
                <synopsis/> 
            </locale> 
            <developer>HUDSON SOFT CO., LTD.</developer> 
            <publisher>Hudson Entertainment, Inc.</publisher> 
            <date year="2009" month="" day=""/> 
            <genre>party</genre> 
            <rating type="ESRB" value="E10+"> 
                <descriptor>comic mischief</descriptor> 
                <descriptor>mild cartoon violence</descriptor> 
                <descriptor>mild suggestive themes</descriptor> 
            </rating> 
            <wi-fi players="0"/> 
            <input players="2"> 
                <control type="wiimote" required="true"/> 
                <control type="nunchuk" required="true"/> 
            </input> 
            <rom version="" name="Help Wanted: 50 Wacky Jobs (DEMO) (USA) (EN).iso" size="4699979776"/> 
        </game> 

到目前为止,我有这个:

    Dim doc as XPathDocument
    Dim nav as XPathNavigator
    Dim iter as XPathNodeIterator
    Dim lstNav As XPathNavigator
    Dim iterNews As XPathNodeIterator

    doc = New XPathDocument("wiitdb.xml")
        nav = doc.CreateNavigator
        iter = nav.Select("/WiiTDB/game") 'Your node name goes here
        'Loop through the records in that node
        While iter.MoveNext
            'Get the data we need from the node
            lstNav = iter.Current
            iterNews = lstNav.SelectDescendants(XPathNodeType.Element, False)
            'Loop through the child nodes
            txtOutput.Text = txtOutput.Text & vbNewLine & iterNews.Current.Name & ": " & iterNews.Current.Value
        End While

它只是跳过代码的“While iter.MoveNext”部分。我尝试使用一个简单的XML文件,它工作正常。

2 个答案:

答案 0 :(得分:1)

我认为您的XPath查询已关闭。 WiiTDB是一个封闭的节点,所以你需要寻找/ datafile / game或// game。

答案 1 :(得分:1)

使用System.Xml.Serialization命名空间:创建一个专用的可序列化类来保存您希望加载的数据,并使用强类型参数定义共享序列化/反序列化函数,以便为您完成工作。

由于新类的结构将严格遵循XML数据的结构,因此不应混淆哪些数据位于运行时实例中的位置。

请参阅我的回答here,了解如何从示例XML文件创建类。