Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/xml/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 解析Amazon订单响应xml_C#_Xml_Parsing_Linq To Xml_Amazon - Fatal编程技术网

C# 解析Amazon订单响应xml

C# 解析Amazon订单响应xml,c#,xml,parsing,linq-to-xml,amazon,C#,Xml,Parsing,Linq To Xml,Amazon,我正在获取对象错误上未设置的引用。。。。 我评论了每一件事情只是为了测试它。即使对于第一个元素,也是抛出异常。 我什么都试过了。如果有人能给我指出正确的方向,我将不胜感激 FormsPersistence是一个类 XDocument doc = XDocument.Parse(responseXml); XNamespace ns = "https://mws.amazonservices.com/Orders/2013-09-01"; var

我正在获取对象错误上未设置的引用。。。。 我评论了每一件事情只是为了测试它。即使对于第一个元素,也是抛出异常。 我什么都试过了。如果有人能给我指出正确的方向,我将不胜感激

FormsPersistence是一个类

 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();

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

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; }


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

更新:


好的,我已经看过整个房子了。XML示例中没有名为
MerchantOrderID
OrderItem
的元素,因此代码中试图访问这些元素的所有行都会触发异常。

与其访问
Value
属性,不如简单地将
XElement
转换为字符串,例如:
AmazonOrderID=(string)attrib.Element(ns+“AmazonOrderID”)
。检查是否仍以这种方式获得空引用异常元素类型“Orders”必须由匹配的结束标记终止.Value属性引发错误,只是因为我无法引用该节点。通过删除Value属性,我没有得到任何返回值。@Kokkie我在复制时跳过了该标记,但它存在于我的原始响应文件中。
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; }


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

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

            }).ToList();