【问题标题】:Parse Amazon Order Response xml解析亚马逊订单响应 xml
【发布时间】:2014-07-31 12:04:56
【问题描述】:
 <ListOrdersResponse xmlns="https://mws.amazonservices.com/Orders/2013-09-01">
 <ListOrdersResult>
<NextToken>xxxxxxxx</NextToken>
<CreatedBefore>07/31/2014 15:35:36</CreatedBefore>
<Orders>
  <Order>
    <AmazonOrderId>xxxxxx</AmazonOrderId>
    <SellerOrderId>xxxxxx</SellerOrderId>
    <PurchaseDate>07/21/2014 11:11:21</PurchaseDate>
    <LastUpdateDate>07/21/2014 21:41:23</LastUpdateDate>
    <OrderStatus>Shipped</OrderStatus>
    <FulfillmentChannel>AFN</FulfillmentChannel>
    <SalesChannel>Amazon.in</SalesChannel>
    <ShipServiceLevel>Standard</ShipServiceLevel>
    <ShippingAddress>
      <Name>xxxx</Name>
      <AddressLine1>xxxx</AddressLine1>
      <AddressLine2>xxxxx</AddressLine2>
      <City>xxxx</City>
      <StateOrRegion>xxx</StateOrRegion>
      <PostalCode>xxx</PostalCode>
      <CountryCode>IN</CountryCode>
      <Phone>xxxxxx</Phone>
    </ShippingAddress>
    <OrderTotal>
      <CurrencyCode>INR</CurrencyCode>
      <Amount>355.00</Amount>
    </OrderTotal>
    <NumberOfItemsShipped>1</NumberOfItemsShipped>
    <NumberOfItemsUnshipped>0</NumberOfItemsUnshipped>
    <PaymentExecutionDetail />
    <PaymentMethod>Other</PaymentMethod>
    <MarketplaceId>xxxxx</MarketplaceId>
    <BuyerEmail>xxxxx</BuyerEmail>
    <BuyerName>xxxxx</BuyerName>
    <ShipmentServiceLevelCategory>Standard</ShipmentServiceLevelCategory>
    <OrderType>StandardOrder</OrderType>
    <EarliestShipDate>07/21/2014 21:23:06</EarliestShipDate>
    <LatestShipDate>07/21/2014 21:23:06</LatestShipDate>
  </Order>
 </ListOrdersResult>
 <ResponseMetadata>
<RequestId>16a8a438-f774-4b17-824f-951a4cde7ddc</RequestId>
</ResponseMetadata>
</ListOrdersResponse>

我正在尝试解析上述响应。

 XDocument doc = XDocument.Parse(responseXml);
            XNamespace ns = "https://mws.amazonservices.com/Orders/2013-09-01";
            var data = (from attrib in doc.Descendants(ns + "Order")
                       select new FormsPersistence
                       {

                           AmazonOrderID = (string)attrib.Element(ns+"AmazonOrderID").Value ?? string.Empty,
                           //MerchantOrderID = (string)attrib.Element(ns + "MerchantOrderID").Value ?? string.Empty,
                           //PurchaseDate = (string)attrib.Element(ns + "PurchaseDate").Value ?? string.Empty,
                           //OrderStatus = (string)attrib.Element(ns + "OrderStatus").Value ?? string.Empty,
                           //ASIN = (string)attrib.Element(ns + "OrderItem").Element(ns + "ASIN").Value ?? string.Empty,
                           //SKU = (string)attrib.Element(ns + "OrderItem").Element(ns + "SKU").Value ?? string.Empty,
                          // ItemStatus = (string)attrib.Element(ns + "OrderItem").Element(ns + "ItemStatus").Value ?? string.Empty,
                           //ProductName = (string)attrib.Element(ns + "OrderItem").Element(ns + "ProductName").Value ?? string.Empty,
                           //Quantity = (string)attrib.Element(ns + "OrderItem").Element(ns + "Quantity").Value ?? string.Empty,

                           //Amount = (string)attrib.Element(ns + "OrderItem").Element(ns + "ItemPrice") == null ? string.Empty : (string)attrib.Element(ns + "OrderItem").Element(ns + "ItemPrice").Element(ns + "Component").Element(ns + "Amount").Value,

                       }).ToList();

我收到未在对象错误上设置的引用.... 我评论了每一件事,只是为了测试它。即使是第一个元素,它也会抛出异常。 我已经尝试了一切。如果有人能指出我正确的方向,我将不胜感激。

FormsPersistence 是一个类

class FormsPersistence
{

    public string AmazonOrderID { get; set; }
    public string MerchantOrderID { get; set; }
    public string PurchaseDate { get; set; }
    public string OrderStatus { get; set; }
    public string ASIN { get; set; }
    public string SKU { get; set; }
    public string ItemStatus { get; set; }
    public string ProductName { get; set; }
    public string Quantity { get; set; }
    public string Amount { get; set; }


}

【问题讨论】:

  • 与其访问Value 属性,不如简单地将XElement 转换为字符串更安全,例如:AmazonOrderID = (string)attrib.Element(ns+"AmazonOrderID")。检查您是否仍然以这种方式获得空引用异常
  • 元素类型“Orders”必须以匹配的结束标签“”结束。
  • Value 属性抛出错误只是因为我无法引用节点。通过删除 value 属性我没有得到返回值。
  • @Kokkie 我在复制时跳过了该标签,但它在我的原始响应文件中。

标签: c# xml parsing linq-to-xml amazon


【解决方案1】:

我不是检查整个财产,但首先它只是不同情况的问题。请注意,XML 节点名称区分大小写,因此 AmazonOrderID 应该是 AmazonOrderId

var data = (from attrib in doc.Descendants(ns + "Order")
            select new
            {

                AmazonOrderID = (string)attrib.Element(ns + "AmazonOrderId"),
                .....
                .....

            }).ToList();

所以第一个建议是更仔细地查看您的代码。另一个建议如我的评论中所述,只需将 XElement 转换为合适的值,而不是获取 XElement.Value 属性。

更新:

好的,我已经看到了整个财产。 XML 示例中没有名为 MerchantOrderIDOrderItem 的此类元素,因此代码中尝试访问这些元素的所有行肯定会触发异常。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-04-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多