c# – 使用LINQ解析亚马逊商城XML

c# – 使用LINQ解析亚马逊商城XML,第1张

概述我有一系列来自亚马逊的复杂 XML文件,显示订单报告. XML片段如下: <Order> <AmazonOrderID>000-1111111-2222222</AmazonOrderID> <MerchantOrderID>111-3333333-4444444</MerchantOrderID> <PurchaseDate>2012-03-02T13:28:53+00:00</Pu 我有一系列来自亚马逊的复杂 XML文件,显示订单报告.

XML片段如下:

<Order>  <AmazonorderID>000-1111111-2222222</AmazonorderID>  <MerchantOrderID>111-3333333-4444444</MerchantOrderID>  <PurchaseDate>2012-03-02T13:28:53+00:00</PurchaseDate>  <LastUpdatedDate>2012-03-02T13:29:05+00:00</LastUpdatedDate>  <OrderStatus>Pending</OrderStatus>  <SalesChannel>Amazon.com</SalesChannel>  <URL>http://www.amazon.com</URL>  <FulfillmentData>    <FulfillmentChannel>Amazon</FulfillmentChannel>    <ShipServiceLevel>Standard</ShipServiceLevel>    <Address>      <City>Beverly Hills</City>      <State>CA</State>      <PostalCode>90210-1234</PostalCode>      <Country>US</Country>    </Address>  </FulfillmentData>  <OrderItem>    <ASIN>AmazonASIN </ASIN>    <SKU> Internal-SKU</SKU>    <ItemStatus>Pending</ItemStatus>    <Productname> This is the name of the product </Productname>    <Quantity>1</Quantity>    <ItemPrice>      <Component>        <Type>Principal</Type>        <Amount currency="USD">19.99</Amount>      </Component>    </ItemPrice>  </OrderItem></Order>

我需要对此文件执行的 *** 作是提取XML文档的各个部分,然后对数据执行大量 *** 作.

我遇到的问题是多个订单商品.

以下代码将正确获取每个节点并将其放入列表项中,但我不确定如何将这些多个项与C#中的相同订单号相关联.

C#片段:

List<string> getNodes(string path,string nodename) {    List<string> nodes = new List<string>();     Xdocument xmlDoc = Xdocument.Load(path); //Create the XML document type    foreach (var el in xmlDoc.Descendants(nodename)) {            //for deBUGging            //nodes.Add(el.name + " " + el.Value);            //for production            nodes.Add(el.Value);    }   return nodes;} //end getNodes

该方法称为:

List<string> skuNodes = xml.getNodes(@"AmazonSalesOrders.xml","SKU");

其中xml是实例化的类.

为了进一步解释复杂性:如果将每个节点放入其自己的列表中,则列表的长度将保持不变,前提是只订购一个项目.一旦订购了多个商品,SKU,数量,价格等列表将变得更长并且防止轻松循环.

我确信有一个liNQ to XML语句可以完成我需要的工作,但是我没有足够的经验来使用C#来破解它.

                编辑

我正在尝试在网络上找到的一些liNQ建议.以下看起来很有希望但是返回异常:

base {System.SystemException} = {"Object reference not set to an instance of an object."}

代码是:

var query = from xEle in xmlDoc.Descendants(node)            where xEle.Element("AmazonorderID").Value.ToString() == primaryKey            select new {                   tag = xEle.name.Localname,value = xEle.Value            };

我不确定为什么会发生这种情况,节点和主键的变量在运行时传递.

如果我设置断点,我可以看到primaryKey正确传递,与节点相同;但是当我到达时:

Dictionary<string,string> ordersByID = new Dictionary<string,string>();        foreach (var CurNode in query) {            ordersByID.Add(CurNode.tag,CurNode.value);        }

解析CurNode时得到空引用错误.

解决方法 您可以通过使用linq来实现这一点,你应该使用这样的东西,只需添加更多元素,如果itemprice等需要.. :(其中ns是命名空间)

xmlDoc = Xdocument.Parse(sr.ReadToEnd());Xnamespace ns = "w3.org/2001/XMLSchema-instance";var query = from order in xmlDoc.Descendants(ns + "Order")            from orderItem in order.Elements(ns + "OrderItem")            select new            {                        amazonordeID = order.Element(ns + "AmazonorderID").Value,merchantOrderID = order.Element(ns + "MerchantOrderID ").Value,orderStatus = order.Element(ns + "OrderStatus ").Value,asin = orderItem.Element(ns + "ASIN").Value,quantity = orderItem.Element(ns + "quantity").Value            };

使用上述内容,您可以在单行中将每个亚马逊订单所需的所有信息带回…

总结

以上是内存溢出为你收集整理的c# – 使用LINQ解析亚马逊商城XML全部内容,希望文章能够帮你解决c# – 使用LINQ解析亚马逊商城XML所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/langs/1234462.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2022-06-06
下一篇2022-06-06

发表评论

登录后才能评论

评论列表(0条)

    保存