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

用VB.Net读取带有嵌套表的XML文件,xml,vb.net,Xml,Vb.net,我想知道如何读取包含库存项目的xml文件,并解析其嵌套表,从而为每个库存项目汇总一个值 例如,我的xml文件存储在C:\Temp\StockBalances.xml中,包含以下内容: <Message> <MessageName>string</MessageName> <MessageCreatedDate>2012-10-03</MessageCreatedDate> <StockCodes> <

我想知道如何读取包含库存项目的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>

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

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

你需要展示你已经尝试过的,这不是一个编程服务。也就是说,看看这个C语言的答案,你应该能够很容易地翻译成VB.net,我已经更新了这个问题。我曾经尝试过使用数据集,但是StockCodes表和BalancesMate表之间没有链接,这绝对是完美的。谢谢。这两个数量变量应该是整数而不是字符串。@user3608638您忘记接受答案了吗?对不起,我忘记了。我现在已经做了。
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