首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >从VB.net中的XML字符串中获取数据

从VB.net中的XML字符串中获取数据
EN

Stack Overflow用户
提问于 2018-06-03 17:33:30
回答 3查看 4K关注 0票数 1

我有一个XML刺痛,看起来像这样:

代码语言:javascript
复制
<?xml version="1.0" encoding="UTF-8"?>
<SR Workstation="0014" Status="Active">
 <OS>
  <Identification Hardware="DELL" SerialNumber="123456789">Confirmed</Identification>
  <CN> EXTERN</CN>
  <CV>1.1.2.45</CV>
  <TS>Idle</TS>
  <TSS>Ok</TSS>
  <ReaderStatus Reader="Icc">Enabled</ReaderStatus>
  <ReaderStatus Reader="MS">Enabled</ReaderStatus>
  <LPS>Unavailable</LPS>
 </OS>
</SR>

我可以在VB.net中使用此脚本获取工作站数据和状态数据

代码语言:javascript
复制
Dim sr As New System.IO.StringReader(l_Result.XMLData)
        Dim doc As New Xml.XmlDocument
        doc.Load(sr)
        Dim reader As New Xml.XmlNodeReader(doc)
        While reader.Read()
            Select Case reader.NodeType
                Case Xml.XmlNodeType.Element
                    If reader.Name = "SR" Then
                        If reader.GetAttribute("WorkStation") = "0014" Then
                            txtStatus.Text = reader.GetAttribute("Status")
                            txtSerial.Text = reader.GetAttribute("Identification/SerialNumber")
                            txtHardware.Text = reader.GetAttribute("Identification/Hardware")
                            lblConfirmed.Text = reader.GetAttribute("Identification")
                        End If
                    End If

            End Select
        End While

但是,获取值123456789 (SerialNumber)、戴尔(硬件)和确认并不起作用。

有人能帮我吗?我没有收到错误,但我的文本框和标签仍然是空的。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2018-06-03 21:23:16

使用VB.Net XML Axis Properties

代码语言:javascript
复制
Dim x = System.Xml.Linq.XElement.Parse(l_Result.XMLData), e = x...<Identification>
txtStatus.Text = x.@Status
txtSerial.Text = e.@SerialNumber
txtHardware.Text = e.@Hardware
lblConfirmed.Text = e.Value

要循环元素,请执行以下操作:

代码语言:javascript
复制
For Each e In x...<ReaderStatus>
    Debug.Print(e.Value)
    Debug.Print(e.@Reader)
Next
票数 3
EN

Stack Overflow用户

发布于 2018-06-03 21:05:59

您需要使用Linq to XML。那么你的代码就很简单了:

代码语言:javascript
复制
Dim doc = XDocument.Parse(l_Result.XMLData)

txtStatus.Text = doc.Root.Attribute("Status").Value
txtSerial.Text = doc.Root.Element("OS").Element("Identification").Attribute("SerialNumber").Value
txtHardware.Text = doc.Root.Element("OS").Element("Identification").Attribute("Hardware").Value
lblConfirmed.Text = doc.Root.Element("OS").Element("Identification").Value
票数 1
EN

Stack Overflow用户

发布于 2018-06-03 20:27:36

您可以使用xml linq来获取后代:

代码语言:javascript
复制
Imports System.Xml
Imports System.Xml.Linq

Module Module1

    Sub Main()
        Dim doc As New Xml.XmlDocument
        doc.Load(sr)
        Dim reader As New Xml.XmlNodeReader(doc)
        While Not reader.EOF
            If reader.Name <> "SR" Then
                reader.ReadToFollowing("SR")
            End If
            If Not reader.EOF Then
                Dim sr As XElement = XElement.ReadFrom(reader)
                If CType(sr.Attribute("WorkStation"), String) = "0014" Then
                    txtStatus.Text = reader.GetAttribute("Status")

                    txtSerial.Text = CType(sr.Descendants("SerialNumber").FirstOrDefault(), String)
                    txtHardware.Text = CType(sr.Descendants("Hardware").FirstOrDefault(), String)
                    lblConfirmed.Text = CType(sr.Descendants("Identification").FirstOrDefault(), String)

                    Exit While
                End If
            End If
        End While

    End Sub

End Module
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50664982

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档