VB.NET 按属性文本反序列化 XML 个子节点
VB.NET Deserialize XML sub nodes by attribute text
正在尝试反序列化 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>
这是我的 class:
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.theValue
而不是 xData.TRAN_DATEX.theTarget
编辑: 回复评论。
由于有多个 <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
正在尝试反序列化 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>
这是我的 class:
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.theValue
xData.TRAN_DATEX.theTarget
编辑: 回复评论。
由于有多个 <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