1

当我进行 API 调用时,我返回了以下 XML。我需要创建一个数组来保存 、和中的每一个的<status>和值。谁能分享一些对我有帮助的知识?<description><order_status><payment_status><fulfillment_status>

<orderwave>
  <call_result>
    <order>
      <order_number>17377</order_number>
      <orderwave_order_number>RWD-336475921</orderwave_order_number>
      <order_status>
        <status>active</status>
        <description>This order is free to be charged and shipped.  It is open in the orderwave workflow.</description>
      </order_status>
      <payment_status>
        <status>declined</status>
        <description>This order has been declined by the payment network.</description>
      </payment_status>
      <fulfillment_status>
        <status>not shipped</status>
        <description>This order has not been allocated for shipment.</description>
      </fulfillment_status>
    </order>
  </call_result>
  <warning_count>0</warning_count>
  <warnings/>
  <error_count>0</error_count>
  <errors/>
</orderwave>
4

2 回答 2

0

为了扩展我之前的评论,一个简单快捷的方法是使用List<T> ClassLINQ to XML

使用一个类来保存每个订单的数据 - 例如:

public class Order
{

    public int OrderNumber { get; set; }
    public string OrderStatus { get; set; }
    public string OrderDescription { get; set; }
    public string PaymentStatus { get; set; }
    public string PaymentDescription { get; set; }
    public string FulfillmentStatus { get; set; }
    public string FulfillmentDescription { get; set; }
}

接下来,您可以将 XML 加载到XDocument中,使用 LINQ to XML 对其进行解析并创建 Order 对象列表:

// Parse the XML string; you can also load the XML from a file.
XDocument xDoc = XDocument.Parse("<orderwave>....</orderwave>");

// Get a collection of elements under each order node
var orders = (from x in xDoc.Descendants("order")
// Use the data for each order node to create a new instance of the order class
              select new Order
              {
                  OrderNumber = ConvertTo.Int32(x.Element("order_number").Value),
                  OrderStatus = x.Element("order_status").Element("status").Value,
                  OrderDescription = x.Element("order_status").Element("description").Value,
                  PaymentStatus = x.Element("payment_status").Element("status").Value,
                  PaymentDescription = x.Element("payment_status").Element("description").Value,
                  FulfillmentStatus = x.Element("fulfillment_status").Element("status").Value,
                  FulfillmentDescription = x.Element("fulfillment_status").Element("description").Value
              }).ToList();
          // Convert the result to a list of Order objects

如果您想使用列表而不是数组,这在我的脑海中没有经过测试,但它应该为您指明正确的方向。

于 2012-09-19T03:18:24.797 回答
0

我相信 LinqToXML 是您想要的。

我有一段时间没有这样做了,所以我的语法可能并不完美。

像这样的东西:

var xmlSource = contacts.Load(@"../../return.xml");

var q = xmlSource.Descendants("order").SelectMany(x => x.Elements("order_status")
于 2012-09-18T19:16:06.697 回答