从多行的 XML 中获取结果 [英] Get Resutls from XML with more than one line
问题描述
我想为每个订单获取订单行,并将它们作为表格发送到电子邮件正文中
I want get Order Lines for each Order and bring them to an EMail Body as Table like
值 1 |值 2 |值 3
Value 1 | Value 2 | Value 3
12345 ABC X1_
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>
我试图用这个代码解决这个问题:
I have tried to solve this with this code:
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;
但是当我的订单中有不止一行时,它就不起作用了.我怎样才能以更好的方式解决这个问题?
But when I have more than one Line in the Order it won't work. How can I solve this on a better way ?
推荐答案
看起来导航路径缺少一些 .Element() 调用.
Looks like the navigation path is missing a few .Element()-calls.
var orderLines = xDoc
.Element(nsp + "UniversalInterchange")
.Element(nsp + "Body")
.Element(nsp + "UniversalShipment")
.Element(nsp + "Shipment")
.Element(nsp + "Order")
.Element(nsp + "OrderLineCollection")
.Elements(nsp + "OrderLine");
// 1, 2
var lineNumbers = orderLines.Select(x => x.Element(nsp + "LineNumber").Value);
只要没有找到元素,.Element() 就会返回 null.如果您需要多个条目,您还应该使用 .Elements() 而不是 .Element().
Whenever an element isn't found, null is returned from .Element(). You should also use .Elements() instead of .Element() if you expect multiple entries.
这篇关于从多行的 XML 中获取结果的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!