C#DOM XML Parser显示1个条目而不是2个条目

时间:2016-06-29 09:09:04

标签: c# xml dom xml-parsing

我有一个简单的XML阅读器,可以使用DOM方法读取XML文件。问题是,我在这个特定的XML文件中有两个产品,但它只显示第二个产品(请参阅InvoiceItem框)。我很确定我在某个地方犯了一个愚蠢的错误,但我只是没有看到它。

结果: Result of parsing

源代码:http://pastebin.com/Rh1PF92N

XML:

<?xml version="1.0" encoding="utf-8" ?>
<Invoices>
  <Invoice ID="I1">    
    <InvoiceDate>21/06/2016</InvoiceDate>
    <SellerID>Supp001</SellerID>
    <BuyerID>WCS1810</BuyerID>
    <OrderID>O1</OrderID>
    <InvoiceItem>
      <Product ID="R1">
        <ProductName>8GB RAM King</ProductName>
        <Description>8GB RAM King Brand</Description>
        <Capacity>8GB</Capacity>
        <Quantity>150</Quantity>
        <UnitPrice>100</UnitPrice>
      </Product>
      <Product ID="R2">
        <ProductName>4GB RAM King</ProductName>
        <Description>4GB RAM King Brand</Description>
        <Capacity>4GB</Capacity>
        <Quantity>100</Quantity>
        <UnitPrice>50</UnitPrice>
      </Product>      
    </InvoiceItem>
    <ShippingCharges>5</ShippingCharges>
    <InvoiceTotal>205</InvoiceTotal>
  </Invoice>
</Invoices>

1 个答案:

答案 0 :(得分:1)

foreach (XmlNode node2 in productList)中,您遍历两个产品,但填充invoiceItem并将其添加到invoiceItems的代码超出了foreach循环,因此当foreach循环完成时,您正在添加只有循环中的最后一个元素invoiceItems。 将所有这些代码放在产品foreach

invoiceItem = new InvoiceItem();
invoiceItem.InvoiceID = node.Attributes[0].Value;
invoiceItem.ProductID = prodID;
invoiceItem.Description = description;
invoiceItem.Capacity = capacity;
invoiceItem.Quantity = qty;
invoiceItem.UnitPrice = unitpx;
invoiceItem.TotalPrice = (qty * unitpx);
invoiceItems.Add(invoiceItem);