amazon mws 订单有助于简化、扁平化 xml

Posted

技术标签:

【中文标题】amazon mws 订单有助于简化、扁平化 xml【英文标题】:amazon mws orders help simplify, flatten xml 【发布时间】:2011-01-29 03:50:41 【问题描述】:

我需要简化这个 xml(到一个列表),并将定价与项目(多个项目)相关联

这是我的开始,但评论部分不起作用

            XDocument doc = XDocument.Load( filename );

            var ele = doc.Elements("AmazonEnvelope")
                            //.Elements("Header")
                            .Elements("Message")
                            .Elements("OrderReport")
                            .Elements("Item")

                              .Select(element => new
                              
                                  AmazonOrderItemCode = (string)element.Element("AmazonOrderItemCode"),
                                  SKU = (string)element.Element("SKU"),
                                  Title = (string)element.Element("Title"),
                                  Quantity = (string)element.Element("Quantity"),

                              )

                             //.Elements("ItemPrice")
                             //.Elements("Component")

                              //.Select(element => new
                              //
                             //     Type = (string)element.Element("Type"),
                             //     Amount = (string)element.Element("Amount"),
                             // )


                           .ToList();


            foreach (var x in ele)
            
                Console.WriteLine(x.ToString());
            

这个: AmazonOrderItemCode = 58317736573050,SKU = 6020B,标题 = 面漆,数量 = 1

对此: AmazonOrderItemCode = 58317736573050, SKU = 6020B, Title = Top Coat, Quantity = 1, Type = Principal, Amount = 8.00

最终,由于有多种类型,因此如下所示:

AmazonOrderItemCode = 58317736573050, SKU = 6020B, Title = Top Coat, Quantity = 1, Amount_Principal = 8.00


示例 XML(这只是整个订单中的 1 个订单项)

<Item>
<AmazonOrderItemCode>23845287148226</AmazonOrderItemCode>
<SKU>557B</SKU>
<Title>China Doll</Title>
<Quantity>1</Quantity>
<ProductTaxCode>A_GEN_TAX</ProductTaxCode>
<ItemPrice>
<Component>
<Type>Principal</Type>
<Amount currency="USD">8.00</Amount>
</Component>
<Component>
<Type>Shipping</Type>
<Amount currency="USD">2.08</Amount>
</Component>
<Component>
<Type>Tax</Type>
<Amount currency="USD">0.68</Amount>
</Component>
<Component>
<Type>ShippingTax</Type>
<Amount currency="USD">0.17</Amount>
</Component>
</ItemPrice>
<ItemFees>
<Fee>
<Type>Commission</Type>
<Amount currency="USD">-1.51</Amount>
</Fee>
</ItemFees>
<ItemTaxData>
<TaxJurisdictions>
<TaxLocationCode>330812010</TaxLocationCode>
<City>QUEENS</City>
<County>QUEENS</County>
<State>NY</State>
</TaxJurisdictions>
<TaxableAmounts>
<District currency="USD">0.00</District>
<City currency="USD">8.00</City>
<County currency="USD">0.00</County>
<State currency="USD">8.00</State>
</TaxableAmounts>
<NonTaxableAmounts>
<District currency="USD">8.00</District>
<City currency="USD">0.00</City>
<County currency="USD">0.00</County>
<State currency="USD">0.00</State>
</NonTaxableAmounts>
<ZeroRatedAmounts>
<District currency="USD">0.00</District>
<City currency="USD">0.00</City>
<County currency="USD">8.00</County>
<State currency="USD">0.00</State>
</ZeroRatedAmounts>
<TaxCollectedAmounts>
<District currency="USD">0.00</District>
<City currency="USD">0.36</City>
<County currency="USD">0.00</County>
<State currency="USD">0.32</State>
</TaxCollectedAmounts>
<TaxRates>
<District>0.0000</District>
<City>0.0450</City>
<County>0.0000</County>
<State>0.0400</State>
</TaxRates>
</ItemTaxData>
<ShippingTaxData>
<TaxJurisdictions>
<TaxLocationCode>3308</TaxLocationCode>
<City>QUEENS</City>
<County>QUEENS</County>
<State>NY</State>
</TaxJurisdictions>
<TaxableAmounts>
<District currency="USD">0.00</District>
<City currency="USD">2.08</City>
<County currency="USD">0.00</County>
<State currency="USD">2.08</State>
</TaxableAmounts>
<NonTaxableAmounts>
<District currency="USD">2.08</District>
<City currency="USD">0.00</City>
<County currency="USD">0.00</County>
<State currency="USD">0.00</State>
</NonTaxableAmounts>
<ZeroRatedAmounts>
<District currency="USD">0.00</District>
<City currency="USD">0.00</City>
<County currency="USD">2.08</County>
<State currency="USD">0.00</State>
</ZeroRatedAmounts>
<TaxCollectedAmounts>
<District currency="USD">0.00</District>
<City currency="USD">0.09</City>
<County currency="USD">0.00</County>
<State currency="USD">0.08</State>
</TaxCollectedAmounts>
<TaxRates>
<District>0.0000</District>
<City>0.0450</City>
<County>0.0000</County>
<State>0.0400</State>
</TaxRates>
</ShippingTaxData>
</Item>

【问题讨论】:

【参考方案1】:

也许使用两个级别的匿名选择 - 首先获取您以后需要使用的元素,然后从每个元素中获取您想要最终获得的实际值。

var ele = doc.Elements("AmazonEnvelope")    
             .Elements("Message")   
             .Elements("OrderReport") 
             .Elements( "Item" )
             .Select( s => new
              
                   AmazonOrderItemCode =
                        (string)s.Element( "AmazonOrderItemCode" ),
                   SKU = (string)s.Element( "SKU" ),
                   Title = (string)s.Element( "Title" ),
                   Quantity = (string)s.Element( "Quantity" ),
                   Type = (string)s.Element("ItemPrice")
                                   .Element("Component")
                                   .Element( "Type" ),
                   Amount = (string)s.Element( "ItemPrice" )
                                     .Element( "Component" )
                                     .Element( "Amount" )
               )
             .ToList();

【讨论】:

它不喜欢 .Element --> Component = e.Elements("ItemPrice").Element("Component") 也许可以试试e.Element("ItemPrice").Element("Component") 甚至只是e.Element("Component")?我不做很多 LINQ to XML。基本上,这个想法是找到该节点并临时分配它,以便以后可以将它和 Item 节点一起使用。让我知道是否可行,我会更新我的答案。 你能发布一些示例 XML 吗?我将尝试将一些代码放在一起。 @Scott -- 根据您的示例 XML,我已更新。从您的原文中我不清楚 ItemPrice 是 Item 的子项。看看这是否适合你。更改是选择 Items 元素,然后为每个元素选择您需要的元素(作为字符串),然后从它的孙子 Component 元素中选择其他元素。从中,您可以构建匿名类型,根据需要将结构展平。 看起来不错,因为有多种类型/数量,你知道如何找到每个吗?这只是第一个 - 我会尝试一下,谢谢!

以上是关于amazon mws 订单有助于简化、扁平化 xml的主要内容,如果未能解决你的问题,请参考以下文章

如何通过“亚马逊MWS订单API”获取“非亚马逊”销售渠道订单

Amzon MWS API开发之订单接口

亚马逊 MWS 集成

使用 python-amazon-mws API 的 Amazon Feed

亚马逊 MWS:OrderAdjustment Feed 问题、部分取消

使用 Amazon API MWS 进行签名查询