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