如何使用 Visual Basic 读取 xml 标签的 id

Posted

技术标签:

【中文标题】如何使用 Visual Basic 读取 xml 标签的 id【英文标题】:how to read the id of an xml tag with visual basic 【发布时间】:2019-10-25 19:30:29 【问题描述】:

我想获取一个xml标签的id

例如

<name id ="john">

我想得到 john 的 id,

我的代码:

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

文件.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 从标签中获取所有 id。

【问题讨论】:

If reader.HasAttributes => reader.AttributeCount => reader.Getattribute(0)reader.GetAttribute("id") (Why should I use exit select? - 基本上,你不应该。) 如果您改为loaded the XML into an XmlDocument,则可以使用Dim desiredId = x.SelectSingleNode("//name/@id")?.Value,这比使用XDocument 简单一些。 (.NET 中有几个与 XML 相关的东西,找到最简单的一个来获得你想要的结果似乎是成功的一半。) 谢谢大家用jdweng的代码解决了 【参考方案1】:

试试 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

【讨论】:

以上是关于如何使用 Visual Basic 读取 xml 标签的 id的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Visual Basic 2010 中读取 CSV 文件并在网格中显示结果?

级联组合框的 Visual Basic ACCDB 文件读取

如何将值从Visual Basic 6程序传递给VBscript代码?

Visual Basic 中读取逗号分隔的文本文件

如何在 Visual Basic 6 中解码字符串

无法使用 Visual Basic 代码将对象从 DBNull 转换为其他类型