我有一個像這樣的 xml 檔案:
<?xml version="1.0" standalone="yes"?>
<!--This is a V6 File.-->
<ROOT>
<EVENT>
<APPOINT.APPNO>123456</APPOINT.APPNO>
<APPOINT.DATE>01/01/2021</APPOINT.DATE>
<PERSON_INFO>
<PERSON.CUSTNO>12131415</PERSON.CUSTNO>
<PERSON.LAST>WAYNE</PERSON.LAST>
<PERSON.FIRST>BRUCE</PERSON.FIRST>
<PERSON.MI />
<PERSON.STREET>1234 RANDOM ST</PERSON.STREET>
<PERSON.APT />
<PERSON.CITY>GOTHAM</PERSON.CITY>
</PERSON_INFO>
<ACCOUNT_INFO>
<CARRIER_ACCOUNT_SUMMARY>
<ITEM.GROUP>PERSON GROUP</ITEM.GROUP>
<ITEM.SUM_CHRG>100.50</ITEM.SUM_CHRG>
<ITEM.SUM_PAID>0</ITEM.SUM_PAID>
<ITEM.SUM_WOFF>0</ITEM.SUM_WOFF>
<ITEM.SUM_XOVR>0</ITEM.SUM_XOVR>
<ITEM.SUM_DEDUCTIBLE>0</ITEM.SUM_DEDUCTIBLE>
<ITEM.SUM_DUE>100.50</ITEM.SUM_DUE>
</CARRIER_ACCOUNT_SUMMARY>
<CARRIER_ACCOUNT_SUMMARY>
<ITEM.GROUP>PERSON GROUP #2</ITEM.GROUP>
<ITEM.SUM_CHRG>225.50</ITEM.SUM_CHRG>
<ITEM.SUM_PAID>110.50</ITEM.SUM_PAID>
<ITEM.SUM_WOFF>0</ITEM.SUM_WOFF>
<ITEM.SUM_XOVR>115.00</ITEM.SUM_XOVR>
<ITEM.SUM_DEDUCTIBLE>0</ITEM.SUM_DEDUCTIBLE>
<ITEM.SUM_DUE>0.00</ITEM.SUM_DUE>
</CARRIER_ACCOUNT_SUMMARY>
<ITEM>
<ITEM.TRCNO>654321</ITEM.TRCNO>
<ITEM.INVOICE>987654</ITEM.INVOICE>
</ITEM>
</ACCOUNT_INFO>
<DETAIL_INFO>
<DETAIL>
<TOADD.TOANO>123456</TOADD.TOANO>
<TOADD.EPCRNUM>00-00-000000</TOADD.EPCRNUM>
</DETAIL>
</DETAIL_INFO>
</EVENT>
</ROOT>
我正在使用這個獲取我需要的節點:
Dim xnlNodes As XmlNodeList = xmlDoc.DocumentElement.SelectNodes("/ROOT/EVENT")
我正在嘗試將其<ITEM.SUM_CHRG>放入一個陣列中,因此對于person.custno“12131415”,陣列中的值為“100.50”和“225.50”的值,我想使用 max 方法來確定哪個是陣列中的最大值。
我正在努力創建陣列,因為老實說,我只是在 vb.net 中與陣列斗爭。我試過做一個回圈,檢查“ITEM.SUM_CHRG”的子節點名稱并將值放入一個名為 strSumChrg 的變數中,這樣我就可以檢查它是否更大,但我想我已經離開了。
我正在為每個回圈執行上述操作,如下所示
xmlDoc.Load(strFileName)
Dim xnlNodes As XmlNodeList = xmlDoc.DocumentElement.SelectNodes("/ROOT/EVENT")
For Each xnNode As XmlNode In xnlNodes
Dim strSumChrg As Decimal = 0
If xnSC.Name = "ITEM.SUM_CHRG" Then
If xnSC.FirstChild.Value > 0 Then
strSumChrg = Math.Max(CDec(xnSC.FirstChild.Value), strSumChrg)
End If
End If
Next
uj5u.com熱心網友回復:
請嘗試以下解決方案。
它使用 LINQ to XML。沒有回圈。
我必須修復 XML 檔案以使其格式正確。
以下標記在 XML 示例中不匹配。
<ITEM.GROUP>PERSON GROUP</ITEM.GROUP_CARRIER>
網路
Private Sub Main()
Const fileName As String = "e:\Temp\shadow2020.xml"
Dim doc As XDocument = XDocument.Load(fileName)
Dim maxValue = doc.Descendants("ITEM.SUM_CHRG").Max(Function(x) CDec(x))
Console.WriteLine(maxValue)
End Sub
輸出
225.50
uj5u.com熱心網友回復:
您可以使用 XmlSerialization。創建一些代表您的資料的類
<XmlRoot("ROOT")>
Public Class Root
<XmlElement("EVENT")>
Public Property Events As List(Of [Event])
End Class
Public Class [Event]
<XmlElement("APPOINT.APPNO")>
Public Property AppointAppNo As Integer
<XmlElement("APPOINT.DATE")>
Public Property AppointDateString As String
<XmlIgnore>
Public ReadOnly Property AppointDate As DateTime
Get
Return DateTime.ParseExact(AppointDateString, "dd/MM/yyyy", Nothing)
End Get
End Property
<XmlElement("PERSON_INFO")>
Public Property PersonInfo As PersonInfo
<XmlElement("ACCOUNT_INFO")>
Public Property AccountInfo As AccountInfo
<XmlElement("DETAIL_INFO")>
Public Property DetailInfo As DetailInfo
End Class
Public Class PersonInfo
<XmlElement("PERSON.CUSTNO")>
Public Property CustNo As Integer
<XmlElement("PERSON.LAST")>
Public Property Last As String
<XmlElement("PERSON.FIRST")>
Public Property First As String
<XmlElement("PERSON.MI")>
Public Property MI As String
<XmlElement("PERSON.STREET")>
Public Property Street As String
<XmlElement("PERSON.APT")>
Public Property Apt As String
<XmlElement("PERSON.CITY")>
Public Property City As String
End Class
Public Class AccountInfo
<XmlElement("CARRIER_ACCOUNT_SUMMARY")>
Public Property Summaries As List(Of Summary)
<XmlElement("ITEM")>
Public Property Item As Item
End Class
Public Class DetailInfo
<XmlElement("DETAIL")>
Public Property Detail As Detail
End Class
Public Class Summary
<XmlElement("ITEM.GROUP")>
Public Property Group As String
<XmlElement("ITEM.SUM_CHRG")>
Public Property SumCharge As Decimal
<XmlElement("ITEM.SUM_PAID")>
Public Property SumPaid As Decimal
<XmlElement("ITEM.SUM_WOFF")>
Public Property SumWoff As Decimal
<XmlElement("ITEM.SUM_XOVR")>
Public Property SumXovr As Decimal
<XmlElement("ITEM.SUM_DEDUCTIBLE")>
Public Property SumDeductible As Decimal
<XmlElement("ITEM.SUM_DUE")>
Public Property SumDue As Decimal
End Class
Public Class Item
<XmlElement("ITEM.TRCNO")>
Public Property ItemTrcNo As Integer
<XmlElement("ITEM.INVOICE")>
Public Property ItemInvoice As Integer
End Class
Public Class Detail
<XmlElement("TOADD.TOANO")>
Public Property ToAddToANo As Integer
<XmlElement("TOADD.EPCRNUM")>
Public Property ToAddEpcrNum As String
End Class
然后您可以將檔案反序列化為具有強型別的 .NET 物件,并且您可以使用 LINQ 進行迭代。
Dim myRoot As Root
Dim serializer As New XmlSerializer(GetType(Root))
Using sr As New StreamReader("list.xml")
myObject = serializer.Deserialize(sr)
End Using
Dim charges = myRoot.Events.
Where(Function(e) e.PersonInfo.CustNo = 12131415).
SelectMany(Function(e) e.AccountInfo.Summaries).
Select(Function(s) s.SumCharge)
Console.WriteLine("Charges:")
For Each charge In charges
Console.WriteLine(charge)
Next
Console.WriteLine($"Max: {charges.Max()}")
費用:
100.50
225.50
最大:225.50
當然,一旦您將資料放在適當的 .NET 物件中,就可以做很多其他的事情。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/366594.html
上一篇:更新串列中的串列項(矩陣)
