VB.NET通过属性文本反序列化XML子节点

冰屋斗

尝试反序列化XML文件,但子节点遇到问题。我需要通过那里的ID值来收集这些,例如ConNum,class,recid。目前,我可以取回一个值,但这是给我ID的名称,而不是值。例如:xData.TRAN_DATEX.theTarget = ConNum我需要20190910代替。

这是XML:

<?xml version="1.0" encoding="UTF-8"?>
  <targets>
    <target id="ConNum">20190910</target>
    <target id="class">Third</target>
    <target id="recid">123 </target>
  </targets>

这是我的课:

Imports System.Xml.Serialization

<Serializable, XmlRoot("targets")>
Public Class XmlFile
    <XmlElement("target")> Public Property TRAN_DATEX As myTarget
End Class

<Serializable, XmlRoot("target")>
Public Class myTarget
    <XmlAttribute("id")> Public theTarget As String

End Class

这是反序列化方法:

Dim fFile As FileInfo = New FileInfo("C:\Temp\TARGETS.metadata")
Dim s As New XmlSerializer(GetType(XmlFile))
Using sr As New StreamReader(fFile.FullName)
    xData = s.Deserialize(sr)
    Stop
End Using
它的皮特

theTarget正在获取id属性的值您需要该XmlText元素的:

<Serializable, XmlRoot("target")>
Public Class myTarget
    <XmlAttribute("id")> Public theTarget As String
    <XmlText> Public Property theValue As String
End Class

然后,xData.TRAN_DATEX.theTarget您可以使用代替xData.TRAN_DATEX.theValue


编辑:响应评论。

由于有多个<target>元素,TRAN_DATEX因此需要一个列表:

<Serializable, XmlRoot("targets")>
Public Class XmlFile
    <XmlElement("target")> Public Property TRAN_DATEX As New List(Of myTarget)
End Class

LINQ可用于访问所需的数据:

Dim reqValueTarget = xData.TRAN_DATEX.FirstOrDefault(Function(x) x.theTarget = "ConNum")
If reqValueTarget IsNot Nothing then
    Dim reqValue = reqValueTarget.theValue
End If

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章