【发布时间】:2014-08-14 15:11:32
【问题描述】:
我在解析 XML 文件时遇到问题(在下面的代码 sn-p 中删除了 XML 示例)。我得到的错误是
XmlToLink.exe 中出现“System.NullReferenceException”类型的未处理异常 附加信息:对象引用未设置为对象的实例。
我知道我的问题出在 XmlBarcodes = el.Element("Barcodes") 区域,因为当我注释掉该部分时,订单号、名字和姓氏以及产品名称都会返回。我认为这是因为我没有使用 LINQ 正确地深入到 BarcodeString,但是我已经尝试了所有我可以想出的获取该元素的变体,所以我想知道是否还有其他东西(对我来说并不明显)是语法错误。我究竟做错了什么?
private static IEnumerable<XmlOrders> ParseXml()
{
XDocument document = XDocument.Parse(GetXml());
var query = from el in document.Root.Elements("Order")
select new XmlOrders
{
Id = (int)el.Element("Id"),
XmlBillingAddress = new XmlBillingAddress()
{
FirstName = (string)el.Element("BillingAddress").Element("FirstName"),
LastName = (string)el.Element("BillingAddress").Element("LastName"),
},
XmlOrderItems = el.Element("OrderItems")
.Elements("OrderItem")
.Select(orderItem => new XmlOrderItems()
{
ProductName = (string)orderItem.Element("ProductName")
}).ToList(),
//XmlBarcodes = el.Element("OrderItems").Element("OrderItem").Element("Barcodes")
XmlBarcodes = el.Element("Barcodes")
.Elements("Barcode")
.Select(barcode => new XmlBarcodes()
{
BarcodeNumber = (string)barcode.Element("CodeString")
}).ToList()
};
return query;
}
private static String GetXml()
{
return @"<ArrayOfOrder>
<Order>
<Id>25057</Id>
<OrderGuid />
<BillingAddress>
<FirstName>Alex</FirstName>
<LastName>Onetime</LastName>
</BillingAddress>
<OrderItems>
<OrderItem>
<ProductName>High Mileage Oil Change</ProductName>
<Barcodes>
<Barcode>
<CodeString>A5834A7</CodeString>
</Barcode>
</Barcodes>
</OrderItem>
</OrderItems>
</Order>
<Order>
<Id>25058</Id>
<OrderGuid />
<BillingAddress>
<FirstName>Christopher</FirstName>
<LastName>Tracey</LastName>
</BillingAddress>
<OrderItems>
<OrderItem>
<ProductName>Conventional Oil Change</ProductName>
<Barcodes>
<Barcode>
<CodeString>A7E32B3</CodeString>
</Barcode>
<Barcode>
<CodeString>A6F73BA</CodeString>
</Barcode>
</Barcodes>
</OrderItem>
</OrderItems>
</Order>
</ArrayOfOrder>";
}
XmlToLink.exe 中出现“System.NullReferenceException”类型的未处理异常
附加信息:对象引用未设置为对象的实例。
【问题讨论】:
标签: c# xml linq linq-to-xml