Как прочитать идентификатор тега XML с Visual Basic - PullRequest
0 голосов
/ 25 октября 2019

Я хочу получить идентификатор тега xml

Например,

<name id ="john">

Я хочу получить идентификатор, это Джон,

Мой код:

Public Class Form1
    Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
        My.Computer.Network.DownloadFile(
    "https://example.net/file.xml",
    "files/file.xml")

        Dim reader As New XmlTextReader("files/file.xml")
        While reader.Read()
            Select Case reader.NodeType
                Case XmlNodeType.Element
                    listBox1.Items.Add("<" + reader.Name & ">")
                    Exit Select
                Case XmlNodeType.Text
                    listBox1.Items.Add(reader.Value)
                    Exit Select
                Case XmlNodeType.EndElement
                    listBox1.Items.Add("")
                    Exit Select
            End Select
        End While
    End Sub
End Class

file.xml:

<?xml version="1.0"?>
<map>
  <name id="john" revision="990000237">
  <part id="3554" type="ca"/>
  <part id="3555" type="ca"/>
  </name>
  <name id="well" revision="990000236">
  <part id="3551" type="he"/>
  </name>

Я не знаю, есть ли функция для этого, но мне было интересно, есть ли способ сделать этоЯ буду использовать WHILE, чтобы получить все идентификаторы из тегов.

1 Ответ

2 голосов
/ 26 октября 2019

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

Imports System.Xml
Imports System.Xml.Linq
Module Module1

    Const FILENAME As String = "c:\temp\test.xml"
    Sub Main()
        Dim map As New Map(FILENAME)
    End Sub

End Module
Public Class Map
    Public Shared maps As New List(Of Map)
    Public name As String
    Public revision As String
    Public parts As New Dictionary(Of String, String)
    Public Sub New()

    End Sub
    Public Sub New(filename As String)
        Dim doc As XDocument = XDocument.Load(filename)

        For Each xName As XElement In doc.Descendants("name")
            Dim newMap As New Map
            maps.Add(newMap)
            newMap.name = CType(xName.Attribute("id"), String)
            newMap.revision = CType(xName.Attribute("revision"), String)
            newMap.parts = xName.Descendants("part") _
                .GroupBy(Function(x) CType(x.Attribute("id"), String), Function(y) CType(y.Attribute("type"), String)) _
                .ToDictionary(Function(x) x.Key, Function(y) y.FirstOrDefault())
        Next xName

    End Sub

End Class
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...