Формирование файла XML в vb.net - PullRequest
0 голосов
/ 09 мая 2020

Я пытаюсь загрузить некоторую информацию из файла XML в vb. net. Я следил за обучающими видеороликами по сервалу и читал множество статей, но независимо от того, какой код я набираю, я не могу понять его. Я могу получить только «поле» и текст, например, в первой строке «компания», но я не могу найти «Бренд». Я хочу заполнить текстовые поля на основе этого поля.

Я надеялся, что если я положу сюда xml, кто-нибудь, возможно, сможет помочь.

Заранее большое спасибо

<Response>

    <Field name="Brand">Company</Field>

    <Field name="ProductFamily">Product</Field>

    <Field name="Product Type">Product type</Field>

    <Field name="ModelNumber">model</Field>

    <Field name="Model">1263</Field>

    <Field name="SerialNumber">16380268</Field>

    <Field name="FirmwareNumber">123456</Field>

    <Field name="Version">1.0.11.0</Field>

</Response>

1 Ответ

0 голосов
/ 09 мая 2020

Попробуйте xml linq:

Imports System.Xml
Imports System.Xml.Linq
Module Module1
    Const FILENAME = "c:\temp\test.xml"
    Sub Main()
        Dim settings As New XmlReaderSettings
        settings.ConformanceLevel = ConformanceLevel.Fragment
        Dim reader As XmlReader = XmlReader.Create(FILENAME, settings)

        Dim dict As New Dictionary(Of String, String)

        While (Not reader.EOF)
            If reader.Name <> "Field" Then
                reader.ReadToFollowing("Field")
            End If
            If (Not reader.EOF) Then
                Dim field As XElement = CType(XElement.ReadFrom(reader), XElement)
                dict.Add(CType(field.Attribute("name"), String), CType(field, String))
            End If


        End While

    End Sub

End Module

Код проще с одним элементом root:

Imports System.Xml
Imports System.Xml.Linq
Module Module1
    Const FILENAME = "c:\temp\test.xml"
    Sub Main()


        Dim doc As XDocument = XDocument.Load(FILENAME)
        Dim dict As Dictionary(Of String, String) = doc.Descendants("Field") _
                                                    .GroupBy(Function(x) CType(x.Attribute("name"), String), Function(y) CType(y, String)) _
                                                    .ToDictionary(Function(x) x.Key, Function(y) y.FirstOrDefault())

    End Sub

End Module
...