问题描述
|
有人可以帮我如何使用Linq to XML读取下面的XML文档吗?
<?xml version=\'1.0\' encoding=\'UTF-8\' ?>
<cXML>
<Request>
<OrderRequest>
<OrderRequestHeader orderID=\"xy1234\" orderDate=\"2007-01-1T15:5400+10:00\" type=\"new\" orderVersion=\"001\">
<Total>
<Money currency=\"NZ\">34.06</Money>
</Total>
<ShipTo>
<Address>
<Name xml:lang=\"en\">xyz</Name>
<PostalAddress name=\"xyz\">
<Street>xyz street</Street>
<City>xyz</City>
</PostalAddress>
</Address>
</ShipTo>
<BillTo>
<Address>
<Name xml:lang=\"en\">XYZ</Name>
<PostalAddress name=\"XYZ\">
<Street>PO Box 1234</Street>
<City>xyz</City>
<State>xyz state</State>
</PostalAddress>
</Address>
</BillTo>
<Contact role=\"xxx\" addressID=\"123456789\">
<Name xml:lang=\"en\">XYZ</Name>
<Email name=\"business\">[email protected]</Email>
<Phone>
<TelephoneNumber>
<Number>1234-1234</Number>
</TelephoneNumber>
</Phone>
</Contact>
<Contact role=\"ShipTo\">
<Name xml:lang=\"en\">XYZ</Name>
</Contact>
<Contact role=\"supplier\">
<Name xml:lang=\"en\">XYZ pty ltd</Name>
</Contact>
</OrderRequestHeader>
<ItemOut quantity=\"20\" lineNumber=\"1\" requestedDeliveryDate=\"2007-01-01T00:0000+10:00\">
<ItemID>
<supplierPartID>12345678</supplierPartID>
</ItemID>
<ItemDetail>
<UnitPrice>
<Money currency=\"NZ\">32</Money>
</UnitPrice>
<Description xml:lang=\"en\">abc description</Description>
<UnitOfMeasure>CU</UnitOfMeasure>
<Classification domain=\"N/A\"/>
<ManufacturerPartID>12345678</ManufacturerPartID>
<Extrinsic name=\"StockCode\">12345</Extrinsic>
<Extrinsic name=\"Quantity\">1</Extrinsic>
</ItemDetail>
</ItemOut>
<ItemOut quantity=\"10\" lineNumber=\"2\" requestedDeliveryDate=\"2007-01-01T00:0000+10:00\">
<ItemID>
<supplierPartID>12345678</supplierPartID>
</ItemID>
<ItemDetail>
<UnitPrice>
<Money currency=\"NZ\">32</Money>
</UnitPrice>
<Description xml:lang=\"en\">abc description</Description>
<UnitOfMeasure>CU</UnitOfMeasure>
<Classification domain=\"N/A\"/>
<ManufacturerPartID>12345678</ManufacturerPartID>
<Extrinsic name=\"StockCode\">23333</Extrinsic>
<Extrinsic name=\"Quantity\">1</Extrinsic>
</ItemDetail>
</ItemOut>
</OrderRequest>
我尝试使用此代码,但给出的是null或对象引用未设置错误:
XDocument xdoc = XDocument.Load(@\"C:\\PO.xml\");
var itemOut = (from c in xdoc.Descendants(\"OrderRequest\")
select new
{
supplierID = c.Element(\"Money\").Value,Currency = c.Attribute(\"currency\").Value,Money = c.Element(\"Money\").Value,Description = c.Element(\"Description\").Value,ManufacturerPartID = c.Element(\"ManufacturerPartID\").Value,Extrinsic = c.Attribute(\"name\").Value
});
foreach (var element in itemOut)
{
Console.WriteLine(element.supplierID);
}
Console.ReadLine();
解决方法
好吧,目前尚不清楚,或者您还没有解释您感兴趣的数据。但是,您当前选择的\“ OrderRequest \”元素似乎不具有您尝试访问的任何属性或子元素,因此我怀疑在做
var itemOut = from c in xdoc.Descendants(\"ItemOut\")
select new
{
SupplierID = c.Element(\"ItemID\").Element(\"SupplierPartID\").Value,Currency = c.Element(\"ItemDetail\").Element(\"UnitPrice\").Element(\"Money\").Attribute(\"currency\").Value,Money = (double)c.Element(\"ItemDetail\").Element(\"UnitPrice\").Element(\"Money\"),Description = c.Element(\"ItemDetail\").Element(\"Description\").Value,ManufacturerPartID = c.Element(\"ItemDetail\").Element(\"ManufacturerPartID\").Value
};
更接近您想要实现的目标。我无法确定您要使用哪个“外部”元素,因此我将其省略。