繁体   English   中英

使用 VB.Net 读取带有嵌套表的 XML 文件

[英]Read XML File with nested tables with VB.Net

我想知道如何读取包含库存项目的 xml 文件并解析它的嵌套表以总结每个库存项目的值。

例如,我的 xml 文件存储在 C:\Temp\StockBalances.xml 中并包含以下内容:

<Message>
  <MessageName>string</MessageName>
  <MessageCreatedDate>2012-10-03</MessageCreatedDate>
  <StockCodes>
    <StockCode>
      <OwnerAccountCode>string</OwnerAccountCode>
      <StockCode>12345</StockCode>
      <Description>string</Description>
      <MoreItems>More Items here</MoreItems>
      <Balances>
        <Balance>
          <WarehouseName>Warehouse 1</WarehouseName>
          <Quantity>47</Quantity>
          <QuantityFree>-2848</QuantityFree>
        </Balance>
        <Balance>
          <WarehouseName>Warehouse 2</WarehouseName>
          <Quantity>3396</Quantity>
          <QuantityFree>748</QuantityFree>
          
        </Balance>
      </Balances>
    </StockCode>
    <StockCode>
      <OwnerAccountCode>string</OwnerAccountCode>
      <StockCode>12346</StockCode>
      <Description>string</Description>
      <MoreItems>More Items here</MoreItems>
    <Balances>
        <Balance>
          <WarehouseName>Warehoue 1</WarehouseName>
          <Quantity>1806</Quantity>
          <QuantityFree>4731</QuantityFree>
          
        </Balance>
        <Balance>
          <WarehouseName>Warehouse 3</WarehouseName>
          <Quantity>493</Quantity>
          <QuantityFree>1867</QuantityFree>
          
        </Balance>
        <Balance>
          <WarehouseName>Warehouse 22</WarehouseName>
          <Quantity>716</Quantity>
          <QuantityFree>-3575</QuantityFree>
          
        </Balance>
        <Balance>
          <WarehouseName>Warehouse 24</WarehouseName>
          <Quantity>-4478</Quantity>
          <QuantityFree>-4952</QuantityFree>
          
        </Balance>
      </Balances>
    </StockCode>
  </StockCodes>
</Message>

因此,对于 StockCodes 中的每个 StockCode,我需要总结 Balances 表中的 Quantity 字段。

我之前曾尝试通过将 xml 文件读入数据集来实现这一点,该数据集确实有效,但是库存项目记录和余额表之间没有线,并且余额记录可以是动态的。 因此,对于一个股票代码,可能有三个余额记录,另一个可能有四个记录。

xmlFile = XmlReader.Create(strExportFileName, New XmlReaderSettings())
Dim ds As New DataSet

' Read the file in to a dataset 
ds.ReadXml(xmlFile)


' Close the file
xmlFile.Close()

我使用 Xml Linq 将结果放入数据表中。 不知道你想要总数。 您可以对数据表值求和

Imports System.Xml
Imports System.Xml.Linq
Imports System.Data
Module Module1
    Const FILENAME As String = "c:\temp\test.xml"
    Sub Main()

        Dim doc As XDocument = XDocument.Load(FILENAME)
        Dim stockcodes = doc.Descendants("StockCodes").First()

        Dim dt1 As New DataTable()
        dt1.Columns.Add("Owner", GetType(String))
        dt1.Columns.Add("Code", GetType(String))
        dt1.Columns.Add("Description", GetType(String))
        dt1.Columns.Add("Wharehouse", GetType(String))
        dt1.Columns.Add("Quantity", GetType(Integer))
        dt1.Columns.Add("Free", GetType(Integer))

        Dim dt2 As New DataTable()
        dt2.Columns.Add("Wharehouse", GetType(String))
        dt2.Columns.Add("Quantity", GetType(String))
        dt2.Columns.Add("Free", GetType(String))

        For Each stockcode In stockcodes.Elements("StockCode")
            For Each balance In stockcode.Descendants("Balance")
                Dim owner As String = CType(stockcode.Element("OwnerAccountCode"), String)
                Dim code As String = CType(stockcode.Element("StockCode"), String)
                Dim description As String = CType(stockcode.Element("Description"), String)
                Dim wharehouse As String = CType(balance.Element("WarehouseName"), String)
                Dim quantity As Integer = CType(balance.Element("Quantity"), Integer)
                Dim free As Integer = CType(balance.Element("QuantityFree"), Integer)

                dt1.Rows.Add(New Object() {owner, code, description, wharehouse, quantity, free})

            Next

 
        Next

    End Sub

End Module

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM