【问题标题】:unique values from XML to combobox从 XML 到组合框的唯一值
【发布时间】:2016-02-13 18:06:23
【问题描述】:

我有一些像下面这样的大尺寸 xml 文件 (>500mb)。

    <?xml version="1.0" encoding="UTF-8"?>
<ChangeRequests Count="" ID="" Update="">
    <Requests>
        <Request Type="Insert" Method="Customer">
            <Country>xXx</Country>
            <Window>10</Window>
            <Door>11</Door>
            <Id>88747</Id>
            <Name>Lore Ipsum</Name>
            <FirstName />
            <OwnerFirstName />
            <OwnerName />
            <OwnerBirthday />
            <CompanyName1 />
            <CompanyName1 />
        </Request>
            <Request Type="Insert" Method="Customer">
            <Country>xXx</Country>
            <Window>10</Window>
            <Door>11</Door>
            <Id>444544</Id>
            <Name>Lazy Dog</Name>
            <FirstName />
            <OwnerFirstName />
            <OwnerName />
            <OwnerBirthday />
            <CompanyName1 />
            <CompanyName1 />
        </Request>
            <Request Type="Insert" Method="Customer">
            <Country>xXx</Country>
            <Window>10</Window>
            <Door>11</Door>
            <Id>444544</Id>
            <Name>Lazy Dog</Name>
            <FirstName />
            <OwnerFirstName />
            <OwnerName />
            <OwnerBirthday />
            <CompanyName1 />
            <CompanyName1 />
            </Request>
    </Requests>
</ChangeRequests>

我想读取第一个请求节点并将其所有子节点添加到组合框,而无需读取 xml 的其他部分。 我想出的代码是下面的代码,但它会遍历所有代码,并且会在组合框中添加很多重复值。

  Dim xml_doc As New XmlDocument
    Dim xmlReader As New XmlTextReader(TextBox1.Text)
    Dim arr As New ArrayList
    xmlReader.MoveToContent()
    xmlReader.ReadToFollowing("Request")
    While xmlReader.Read()
        Select Case xmlReader.NodeType
            Case XmlNodeType.Element
                ComboBox1.Items.Add("<" + xmlReader.Name & ">")
                Exit Select
        End Select
    End While

【问题讨论】:

    标签: xml vb.net combobox


    【解决方案1】:

    如果您只想读取第一个 Request 元素的子元素,可以检查 Request 元素的结尾并退出循环:

    While xmlReader.Read()
        If xmlReader.NodeType = XmlNodeType.EndElement AndAlso xmlReader.Name = "Request" Then
            Exit While
        End If
        Select Case xmlReader.NodeType
            ' ...
    

    这仍然会给您留下重复的任何子元素的重复项,例如&lt;CompanyName1&gt;... 但也许没关系。如果您还想删除这些重复数据,LINQ 的 Distinct 方法可以提供帮助:

    Dim xmlReader As New XmlTextReader(TextBox1.Text)
    xmlReader.MoveToContent()
    xmlReader.ReadToFollowing("Request")
    ' Collect the names in a List
    Dim elementNames As New List(Of String)()
    While xmlReader.Read()
        Select Case xmlReader.NodeType
            Case XmlNodeType.Element
                elementNames.Add("<" + xmlReader.Name & ">")
                Exit Select
        End Select
    End While
    ' Add distinct values to the ComboBox
    ComboBox1.Items.AddRange(elementNames.Distinct().ToArray())
    

    【讨论】:

    • 工作就像一个魅力,谢谢你一千次!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-07-11
    • 1970-01-01
    • 2016-01-25
    • 2012-02-10
    • 1970-01-01
    相关资源
    最近更新 更多