【发布时间】:2015-11-21 09:51:40
【问题描述】:
我想为每个订单获取订单行并将它们作为表格带到电子邮件正文中
值 1 |价值 2 |价值 3
12345 ABC X1_
XML 代码:
<?xml version="1.0" encoding="utf-8"?><UniversalInterchange xmlns= "http://www.designworker/namespace" version="1.1">
<Header> </Header>
<Body>
<UniversalShipment xmlns="http://www.designworker/namespace" version="1.1">
<Shipment>
<DataContext>
<DataTargetCollection>
<DataTarget>
<Type>SMTPTYPE</Type>
</DataTarget>
</DataTargetCollection>
</DataContext>
<Order>
<OrderNumber>99348234234</OrderNumber>
<OrderLineCollection>
<OrderLine>
<LineNumber>1</LineNumber>
<OrderedQty>455.000</OrderedQty>
<OrderedQtyUnit>
<Code>MORE</Code>
</OrderedQtyUnit>
<Product>
<Code>999LAM01</Code>
<Description>New Design Work</Description>
</Product>
<QuantityMet>1.000</QuantityMet>
<ShortfallQuantity>0</ShortfallQuantity>
</OrderLine>
<OrderLine>
<LineNumber>2</LineNumber>
<OrderedQty>655.000</OrderedQty>
<OrderedQtyUnit>
<Code>SOME</Code>
</OrderedQtyUnit>
<Product>
<Code>999LAM02</Code>
<Description>OLD Design Work </Description>
</Product>
<QuantityMet>3.000</QuantityMet>
<ShortfallQuantity>45</ShortfallQuantity>
</OrderLine>
</OrderLineCollection>
</Order>
</Shipment>
</UniversalShipment>
</Body>
</UniversalInterchange>
我试图用这段代码解决这个问题:
var xDoc = XDocument.Parse(xmlValue);
XNamespace nsp = ns;
try
{
var value = xDoc
.Element(nsp + "UniversalInterchange")
.Element(nsp + "Body")
.Element(nsp + "UniversalShipment")
.Element(nsp + "Order")
.Element(nsp + "OrderLine")
.Element(nsp + "LineNumber")
.Value;
return value;
但是当我在订单中有不止一行时,它就不起作用了。 我怎样才能以更好的方式解决这个问题?
【问题讨论】:
-
还有元素。然后我会从订单中获得所有行吗?
-
var orderLines = [...].Elements(nsp + "OrderLine"); var lineNumbers = orderLines.SelectMany(ol => ol.Element(nsp + "LineNumber")); var lineNumberValues = lineNumbers.SelectMany(ln => ln.Value); -
看起来不错,但我需要一行中的行号和产品代码,下一行号和下一个产品代码是一个新行
-
1.创建一个小类来存储您需要的来自订单行的数据(行号和产品代码)。 2. 创建
List<ThatClass>。foreach(var orderLine in orderLines) { \\ create a new object of ThatClass, fill it with the info of the current orderLine and then add it to the list }。 3. 对于您想要的每一行,遍历列表中的所有项目,连接该行中您想要的一个属性的值,以 newLine 结束。