2017-05-19 3 views
0

Ich habe eine XML, die ich als Antwort bekomme, aber manchmal einige Attribute nicht kommen, so dass ich Ausnahme beim Parsen als Kindnode Ich weiß nicht, wie mit Attribut zu analysieren kann jemand Hilfe.Parsing Xml in C# mit Attributname

xml ist:

<?xml version="1.0"?> 
    <aws:UrlInfoResponse xmlns:aws="http://alexa.amazonaws.com/doc/2005-10-05/"><aws:Response xmlns:aws="http://awis.amazonaws.com/doc/2005-07-11"><aws:OperationRequest><aws:RequestId>2f63dc1c-3ce8-c3fa-0394-e9c1c31c4246</aws:RequestId></aws:OperationRequest><aws:UrlInfoResult> 
    <aws:Alexa> 
     <aws:ContactInfo> 
     <aws:DataUrl type="canonical">bose.com</aws:DataUrl> 
     <aws:PhoneNumbers> 
      <aws:PhoneNumber/> 
     </aws:PhoneNumbers> 
     <aws:OwnerName/> 
     <aws:Email/> 
     <aws:PhysicalAddress/> 
     <aws:CompanyStockTicker/> 
     </aws:ContactInfo> 
     <aws:ContentData> 
     <aws:DataUrl type="canonical">bose.com</aws:DataUrl> 
     <aws:SiteData> 
      <aws:Title>Bose</aws:Title> 
      <aws:Description>Manufacturers of complete home audio systems such as home theater systems, DVD systems and accessories.</aws:Description> 
     </aws:SiteData> 
     <aws:LinksInCount>2368</aws:LinksInCount> 
     <aws:Keywords> 
      <aws:Keyword>Consumer Electronics</aws:Keyword> 
     </aws:Keywords> 
     </aws:ContentData> 
     <aws:Related> 
     <aws:DataUrl type="canonical">bose.com</aws:DataUrl> 
     <aws:Categories> 
      <aws:CategoryData> 
      <aws:Title>Electronics/Audio</aws:Title> 
      <aws:AbsolutePath>Top/Business/Consumer_Goods_and_Services/Electronics/Audio</aws:AbsolutePath> 
      </aws:CategoryData> 
      <aws:CategoryData> 
      <aws:Title>Shopping/Consumer Electronics</aws:Title> 
      <aws:AbsolutePath>Top/Shopping/Consumer_Electronics/B</aws:AbsolutePath> 
      </aws:CategoryData> 
      <aws:CategoryData> 
      <aws:Title>Business and Economy/Entertainment and Media</aws:Title> 
      <aws:AbsolutePath>Top/Regional/North_America/United_States/Massachusetts/Localities/F/Framingham/Business_and_Economy/Entertainment_and_Media</aws:AbsolutePath> 
      </aws:CategoryData> 
     </aws:Categories> 
     </aws:Related> 
     <aws:TrafficData> 
     <aws:DataUrl type="canonical">bose.com</aws:DataUrl> 
     <aws:Rank>11305</aws:Rank> 
     <aws:UsageStatistics> 
      <aws:UsageStatistic> 
      <aws:TimeRange> 
       <aws:Months>3</aws:Months> 
      </aws:TimeRange> 
      <aws:Rank> 
       <aws:Value>11305</aws:Value> 
       <aws:Delta>+1450</aws:Delta> 
      </aws:Rank> 
      <aws:Reach> 
       <aws:Rank> 
       <aws:Value>11392</aws:Value> 
       <aws:Delta>+1594</aws:Delta> 
       </aws:Rank> 
       <aws:PerMillion> 
       <aws:Value>87.6</aws:Value> 
       <aws:Delta>-13.94%</aws:Delta> 
       </aws:PerMillion> 
      </aws:Reach> 
      <aws:PageViews> 
       <aws:PerMillion> 
       <aws:Value>5.9</aws:Value> 
       <aws:Delta>-11.85%</aws:Delta> 
       </aws:PerMillion> 
       <aws:Rank> 
       <aws:Value>13240</aws:Value> 
       <aws:Delta>1318</aws:Delta> 
       </aws:Rank> 
       <aws:PerUser> 
       <aws:Value>2.87</aws:Value> 
       <aws:Delta>+3%</aws:Delta> 
       </aws:PerUser> 
      </aws:PageViews> 
      </aws:UsageStatistic> 
      <aws:UsageStatistic> 
      <aws:TimeRange> 
       <aws:Months>1</aws:Months> 
      </aws:TimeRange> 
      <aws:Rank> 
       <aws:Value>11396</aws:Value> 
       <aws:Delta>+175</aws:Delta> 
      </aws:Rank> 
      <aws:Reach> 
       <aws:Rank> 
       <aws:Value>11602</aws:Value> 
       <aws:Delta>+176</aws:Delta> 
       </aws:Rank> 
       <aws:PerMillion> 
       <aws:Value>86.9</aws:Value> 
       <aws:Delta>-0.510%</aws:Delta> 
       </aws:PerMillion> 
      </aws:Reach> 
      <aws:PageViews> 
       <aws:PerMillion> 
       <aws:Value>5.93</aws:Value> 
       <aws:Delta>-1.76%</aws:Delta> 
       </aws:PerMillion> 
       <aws:Rank> 
       <aws:Value>13221</aws:Value> 
       <aws:Delta>331</aws:Delta> 
       </aws:Rank> 
       <aws:PerUser> 
       <aws:Value>2.92</aws:Value> 
       <aws:Delta>-1.02%</aws:Delta> 
       </aws:PerUser> 
      </aws:PageViews> 
      </aws:UsageStatistic> 
      <aws:UsageStatistic> 
      <aws:TimeRange> 
       <aws:Days>7</aws:Days> 
      </aws:TimeRange> 
      <aws:Rank> 
       <aws:Value>11570</aws:Value> 
       <aws:Delta>+394</aws:Delta> 
      </aws:Rank> 
      <aws:Reach> 
       <aws:Rank> 
       <aws:Value>11949</aws:Value> 
       <aws:Delta>+569</aws:Delta> 
       </aws:Rank> 
       <aws:PerMillion> 
       <aws:Value>84</aws:Value> 
       <aws:Delta>-5.640%</aws:Delta> 
       </aws:PerMillion> 
      </aws:Reach> 
      <aws:PageViews> 
       <aws:PerMillion> 
       <aws:Value>5.99</aws:Value> 
       <aws:Delta>-0.41%</aws:Delta> 
       </aws:PerMillion> 
       <aws:Rank> 
       <aws:Value>12951</aws:Value> 
       <aws:Delta>-102</aws:Delta> 
       </aws:Rank> 
       <aws:PerUser> 
       <aws:Value>3.0</aws:Value> 
       <aws:Delta>+6%</aws:Delta> 
       </aws:PerUser> 
      </aws:PageViews> 
      </aws:UsageStatistic> 
      <aws:UsageStatistic> 
      <aws:TimeRange> 
       <aws:Days>1</aws:Days> 
      </aws:TimeRange> 
      <aws:Rank> 
       <aws:Value>11837</aws:Value> 
       <aws:Delta>-215</aws:Delta> 
      </aws:Rank> 
      <aws:Reach> 
       <aws:Rank> 
       <aws:Value>12937</aws:Value> 
       <aws:Delta>-21</aws:Delta> 
       </aws:Rank> 
       <aws:PerMillion> 
       <aws:Value>78</aws:Value> 
       <aws:Delta>-0.40%</aws:Delta> 
       </aws:PerMillion> 
      </aws:Reach> 
      <aws:PageViews> 
       <aws:PerMillion> 
       <aws:Value>6.7</aws:Value> 
       <aws:Delta>+7%</aws:Delta> 
       </aws:PerMillion> 
       <aws:Rank> 
       <aws:Value>11807</aws:Value> 
       <aws:Delta>-897</aws:Delta> 
       </aws:Rank> 
       <aws:PerUser> 
       <aws:Value>3.8</aws:Value> 
       <aws:Delta>+7%</aws:Delta> 
       </aws:PerUser> 
      </aws:PageViews> 
      </aws:UsageStatistic> 
     </aws:UsageStatistics> 
     <aws:ContributingSubdomains> 
      <aws:ContributingSubdomain> 
      <aws:DataUrl>bose.com</aws:DataUrl> 
      <aws:TimeRange> 
       <aws:Months>1</aws:Months> 
      </aws:TimeRange> 
      <aws:Reach> 
       <aws:Percentage>79.41%</aws:Percentage> 
      </aws:Reach> 
      <aws:PageViews> 
       <aws:Percentage>74.98%</aws:Percentage> 
       <aws:PerUser>2.75</aws:PerUser> 
      </aws:PageViews> 
      </aws:ContributingSubdomain> 
      <aws:ContributingSubdomain> 
      <aws:DataUrl>community.bose.com</aws:DataUrl> 
      <aws:TimeRange> 
       <aws:Months>1</aws:Months> 
      </aws:TimeRange> 
      <aws:Reach> 
       <aws:Percentage>12.41%</aws:Percentage> 
      </aws:Reach> 
      <aws:PageViews> 
       <aws:Percentage>9.10%</aws:Percentage> 
       <aws:PerUser>2.1</aws:PerUser> 
      </aws:PageViews> 
      </aws:ContributingSubdomain> 
      <aws:ContributingSubdomain> 
      <aws:DataUrl>global.bose.com</aws:DataUrl> 
      <aws:TimeRange> 
       <aws:Months>1</aws:Months> 
      </aws:TimeRange> 
      <aws:Reach> 
       <aws:Percentage>6.49%</aws:Percentage> 
      </aws:Reach> 
      <aws:PageViews> 
       <aws:Percentage>3.08%</aws:Percentage> 
       <aws:PerUser>1.4</aws:PerUser> 
      </aws:PageViews> 
      </aws:ContributingSubdomain> 
      <aws:ContributingSubdomain> 
      <aws:DataUrl>pro.bose.com</aws:DataUrl> 
      <aws:TimeRange> 
       <aws:Months>1</aws:Months> 
      </aws:TimeRange> 
      <aws:Reach> 
       <aws:Percentage>2.32%</aws:Percentage> 
      </aws:Reach> 
      <aws:PageViews> 
       <aws:Percentage>2.43%</aws:Percentage> 
       <aws:PerUser>3.0</aws:PerUser> 
      </aws:PageViews> 
      </aws:ContributingSubdomain> 
      <aws:ContributingSubdomain> 
      <aws:DataUrl>assets.bose.com</aws:DataUrl> 
      <aws:TimeRange> 
       <aws:Months>1</aws:Months> 
      </aws:TimeRange> 
      <aws:Reach> 
       <aws:Percentage>4.01%</aws:Percentage> 
      </aws:Reach> 
      <aws:PageViews> 
       <aws:Percentage>1.89%</aws:Percentage> 
       <aws:PerUser>1.4</aws:PerUser> 
      </aws:PageViews> 
      </aws:ContributingSubdomain> 
      <aws:ContributingSubdomain> 
      <aws:DataUrl>btu.bose.com</aws:DataUrl> 
      <aws:TimeRange> 
       <aws:Months>1</aws:Months> 
      </aws:TimeRange> 
      <aws:Reach> 
       <aws:Percentage>4.24%</aws:Percentage> 
      </aws:Reach> 
      <aws:PageViews> 
       <aws:Percentage>1.75%</aws:Percentage> 
       <aws:PerUser>1.2</aws:PerUser> 
      </aws:PageViews> 
      </aws:ContributingSubdomain> 
      <aws:ContributingSubdomain> 
      <aws:DataUrl>accommodations.bose.com</aws:DataUrl> 
      <aws:TimeRange> 
       <aws:Months>1</aws:Months> 
      </aws:TimeRange> 
      <aws:Reach> 
       <aws:Percentage>0.37%</aws:Percentage> 
      </aws:Reach> 
      <aws:PageViews> 
       <aws:Percentage>0.93%</aws:Percentage> 
       <aws:PerUser>7.3</aws:PerUser> 
      </aws:PageViews> 
      </aws:ContributingSubdomain> 
      <aws:ContributingSubdomain> 
      <aws:DataUrl>downloads.bose.com</aws:DataUrl> 
      <aws:TimeRange> 
       <aws:Months>1</aws:Months> 
      </aws:TimeRange> 
      <aws:Reach> 
       <aws:Percentage>2.54%</aws:Percentage> 
      </aws:Reach> 
      <aws:PageViews> 
       <aws:Percentage>0.90%</aws:Percentage> 
       <aws:PerUser>1.0</aws:PerUser> 
      </aws:PageViews> 
      </aws:ContributingSubdomain> 
      <aws:ContributingSubdomain> 
      <aws:DataUrl>knowledgebase.bose.com</aws:DataUrl> 
      <aws:TimeRange> 
       <aws:Months>1</aws:Months> 
      </aws:TimeRange> 
      <aws:Reach> 
       <aws:Percentage>0.24%</aws:Percentage> 
      </aws:Reach> 
      <aws:PageViews> 
       <aws:Percentage>0.74%</aws:Percentage> 
       <aws:PerUser>9.1</aws:PerUser> 
      </aws:PageViews> 
      </aws:ContributingSubdomain> 
      <aws:ContributingSubdomain> 
      <aws:DataUrl>gd.bose.com</aws:DataUrl> 
      <aws:TimeRange> 
       <aws:Months>1</aws:Months> 
      </aws:TimeRange> 
      <aws:Reach> 
       <aws:Percentage>0.29%</aws:Percentage> 
      </aws:Reach> 
      <aws:PageViews> 
       <aws:Percentage>0.66%</aws:Percentage> 
       <aws:PerUser>6.6</aws:PerUser> 
      </aws:PageViews> 
      </aws:ContributingSubdomain> 
      <aws:ContributingSubdomain> 
      <aws:DataUrl>em.bose.com</aws:DataUrl> 
      <aws:TimeRange> 
       <aws:Months>1</aws:Months> 
      </aws:TimeRange> 
      <aws:Reach> 
       <aws:Percentage>0.69%</aws:Percentage> 
      </aws:Reach> 
      <aws:PageViews> 
       <aws:Percentage>0.61%</aws:Percentage> 
       <aws:PerUser>2.6</aws:PerUser> 
      </aws:PageViews> 
      </aws:ContributingSubdomain> 
      <aws:ContributingSubdomain> 
      <aws:DataUrl>globalpressroom.bose.com</aws:DataUrl> 
      <aws:TimeRange> 
       <aws:Months>1</aws:Months> 
      </aws:TimeRange> 
      <aws:Reach> 
       <aws:Percentage>0.50%</aws:Percentage> 
      </aws:Reach> 
      <aws:PageViews> 
       <aws:Percentage>0.58%</aws:Percentage> 
       <aws:PerUser>3.3</aws:PerUser> 
      </aws:PageViews> 
      </aws:ContributingSubdomain> 
      <aws:ContributingSubdomain> 
      <aws:DataUrl>hearphones.bose.com</aws:DataUrl> 
      <aws:TimeRange> 
       <aws:Months>1</aws:Months> 
      </aws:TimeRange> 
      <aws:Reach> 
       <aws:Percentage>0.95%</aws:Percentage> 
      </aws:Reach> 
      <aws:PageViews> 
       <aws:Percentage>0.42%</aws:Percentage> 
       <aws:PerUser>1.3</aws:PerUser> 
      </aws:PageViews> 
      </aws:ContributingSubdomain> 
      <aws:ContributingSubdomain> 
      <aws:DataUrl>reseller.bose.com</aws:DataUrl> 
      <aws:TimeRange> 
       <aws:Months>1</aws:Months> 
      </aws:TimeRange> 
      <aws:Reach> 
       <aws:Percentage>0.21%</aws:Percentage> 
      </aws:Reach> 
      <aws:PageViews> 
       <aws:Percentage>0.39%</aws:Percentage> 
       <aws:PerUser>5</aws:PerUser> 
      </aws:PageViews> 
      </aws:ContributingSubdomain> 
      <aws:ContributingSubdomain> 
      <aws:DataUrl>itsm.bose.com</aws:DataUrl> 
      <aws:TimeRange> 
       <aws:Months>1</aws:Months> 
      </aws:TimeRange> 
      <aws:Reach> 
       <aws:Percentage>0.17%</aws:Percentage> 
      </aws:Reach> 
      <aws:PageViews> 
       <aws:Percentage>0.25%</aws:Percentage> 
       <aws:PerUser>4</aws:PerUser> 
      </aws:PageViews> 
      </aws:ContributingSubdomain> 
      <aws:ContributingSubdomain> 
      <aws:DataUrl>auth.bose.com</aws:DataUrl> 
      <aws:TimeRange> 
       <aws:Months>1</aws:Months> 
      </aws:TimeRange> 
      <aws:Reach> 
       <aws:Percentage>0.36%</aws:Percentage> 
      </aws:Reach> 
      <aws:PageViews> 
       <aws:Percentage>0.21%</aws:Percentage> 
       <aws:PerUser>1.7</aws:PerUser> 
      </aws:PageViews> 
      </aws:ContributingSubdomain> 
      <aws:ContributingSubdomain> 
      <aws:DataUrl>build.bose.com</aws:DataUrl> 
      <aws:TimeRange> 
       <aws:Months>1</aws:Months> 
      </aws:TimeRange> 
      <aws:Reach> 
       <aws:Percentage>0.40%</aws:Percentage> 
      </aws:Reach> 
      <aws:PageViews> 
       <aws:Percentage>0.17%</aws:Percentage> 
       <aws:PerUser>1.2</aws:PerUser> 
      </aws:PageViews> 
      </aws:ContributingSubdomain> 
      <aws:ContributingSubdomain> 
      <aws:DataUrl>products.bose.com</aws:DataUrl> 
      <aws:TimeRange> 
       <aws:Months>1</aws:Months> 
      </aws:TimeRange> 
      <aws:Reach> 
       <aws:Percentage>0.43%</aws:Percentage> 
      </aws:Reach> 
      <aws:PageViews> 
       <aws:Percentage>0.17%</aws:Percentage> 
       <aws:PerUser>1.1</aws:PerUser> 
      </aws:PageViews> 
      </aws:ContributingSubdomain> 
      <aws:ContributingSubdomain> 
      <aws:DataUrl>employeepurchase.bose.com</aws:DataUrl> 
      <aws:TimeRange> 
       <aws:Months>1</aws:Months> 
      </aws:TimeRange> 
      <aws:Reach> 
       <aws:Percentage>0.07%</aws:Percentage> 
      </aws:Reach> 
      <aws:PageViews> 
       <aws:Percentage>0.16%</aws:Percentage> 
       <aws:PerUser>7</aws:PerUser> 
      </aws:PageViews> 
      </aws:ContributingSubdomain> 
      <aws:ContributingSubdomain> 
      <aws:DataUrl>professional.bose.com</aws:DataUrl> 
      <aws:TimeRange> 
       <aws:Months>1</aws:Months> 
      </aws:TimeRange> 
      <aws:Reach> 
       <aws:Percentage>0.23%</aws:Percentage> 
      </aws:Reach> 
      <aws:PageViews> 
       <aws:Percentage>0.10%</aws:Percentage> 
       <aws:PerUser>1</aws:PerUser> 
      </aws:PageViews> 
      </aws:ContributingSubdomain> 
      <aws:ContributingSubdomain> 
      <aws:DataUrl>OTHER</aws:DataUrl> 
      <aws:TimeRange> 
       <aws:Months>1</aws:Months> 
      </aws:TimeRange> 
      <aws:Reach> 
       <aws:Percentage>0</aws:Percentage> 
      </aws:Reach> 
      <aws:PageViews> 
       <aws:Percentage>0.49%</aws:Percentage> 
       <aws:PerUser>0</aws:PerUser> 
      </aws:PageViews> 
      </aws:ContributingSubdomain> 
     </aws:ContributingSubdomains> 
     </aws:TrafficData> 
    </aws:Alexa></aws:UrlInfoResult><aws:ResponseStatus xmlns:aws="http://alexa.amazonaws.com/doc/2005-10-05/"><aws:StatusCode>Success</aws:StatusCode></aws:ResponseStatus> 
    </aws:Response></aws:UrlInfoResponse> 
+1

Es wäre eine gute Übung Serialisierung für diesen Einsatz. Serialisieren Sie Ihre XML-Datei in ein Objekt und lesen Sie dann die Eigenschaften. Versuchen Sie, hier zu starten: https://msdn.microsoft.com/en-us/library/tz8csy73(v=vs.110).aspx –

+0

hi haben Sie die XML gesehen? Es ist ziemlich komplex, eine Klasse zu deklarieren und zu deserialisieren. Kannst du helfen? @Den – raghav

+0

Ich verwende immer Werkzeuge, um XML oder JSON in C# zu konvertieren. Für XML benutze ich http://xmltocsharp.azurewebsites.net/, fügen Sie einfach Ihre XML-Ausgabe ein und die Klassen werden für Sie gerendert. –

Antwort

1

Try xml linq:

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Text; 
using System.Xml; 
using System.Xml.Linq; 
using System.Globalization; 

namespace ConsoleApplication3 
{ 
    class Program 
    { 
     const string FILENAME = @"c:\temp\test.xml"; 
     public static void Main(string[] args) 
     { 
      Response response = new Response(FILENAME); 
     } 
    } 
    public class Response 
    { 
     public Response(string filename) 
     { 
      XDocument doc = XDocument.Load(filename); 

      XElement response = doc.Descendants().Where(x => x.Name.LocalName == "Response").FirstOrDefault(); 
      XNamespace awsNs = response.GetNamespaceOfPrefix("aws"); 

      requestId = (string)response.Descendants(awsNs + "RequestId").FirstOrDefault(); 

      XElement alexa = response.Descendants(awsNs + "Alexa").FirstOrDefault(); 

      contentData = alexa.Elements(awsNs + "ContentData").Select(x => new ContentData() { 
       urlType = (string)x.Element(awsNs + "DataUrl").Attribute("type"), 
       url = (string)x.Element(awsNs + "DataUrl"), 
       title = (string)x.Descendants(awsNs + "Title").FirstOrDefault(), 
       description = (string)x.Descendants(awsNs + "Description").FirstOrDefault(), 
       linkCount = (int)x.Element(awsNs + "LinksInCount"), 
       keyWords = x.Elements(awsNs + "Keywords").Select(y => (string)y).ToList() 
      }).FirstOrDefault(); 

      categoryData = alexa.Element(awsNs + "Related").Descendants(awsNs + "CategoryData") 
       .GroupBy(x => (string)x.Element(awsNs + "Title"), y => (string)y.Element(awsNs + "AbsolutePath")) 
       .ToDictionary(x => x.Key, y => y.FirstOrDefault()); 

      trafficData = alexa.Elements(awsNs + "TrafficData").Select(x => new TrafficData() { 
       rank = (int)x.Element(awsNs + "Rank"), 
       statics = x.Descendants(awsNs + "UsageStatistic").Select(y => new Statistics() { 
        months = (int?)y.Descendants(awsNs + "Months").FirstOrDefault(), 
        days = (int?)y.Descendants(awsNs + "Days").FirstOrDefault(), 
        rankValue = (int)y.Element(awsNs + "Rank").Element(awsNs + "Value"), 
        rankDelta = (int)y.Element(awsNs + "Rank").Element(awsNs + "Delta"), 
        reachrankValue = (int)y.Element(awsNs + "Reach").Element(awsNs + "Rank").Element(awsNs + "Value"), 
        reachRankDelta = (int)y.Element(awsNs + "Reach").Element(awsNs + "Rank").Element(awsNs + "Value"), 
        reachPerMillionValue = (decimal)y.Element(awsNs + "Reach").Element(awsNs + "PerMillion").Element(awsNs + "Value"), 
        reachPerMillionDeltaPercentage = decimal.Parse(((string)(y.Element(awsNs + "Reach").Element(awsNs + "PerMillion").Element(awsNs + "Delta"))).Split(new char[] {'%'}).FirstOrDefault()), 
        pageViewsPerMillionValue = (decimal)y.Element(awsNs + "PageViews").Element(awsNs + "PerMillion").Element(awsNs + "Value"), 
        pageViewsPerMillionDeltaPercentage = decimal.Parse(((string)(y.Element(awsNs + "PageViews").Element(awsNs + "PerMillion").Element(awsNs + "Delta"))).Split(new char[] {'%'}).FirstOrDefault()), 
        pageViewsRankValue = (int)y.Element(awsNs + "PageViews").Element(awsNs + "Rank").Element(awsNs + "Value"), 
        pageViewsRankDelta = (int)y.Element(awsNs + "PageViews").Element(awsNs + "Rank").Element(awsNs + "Value"), 
        pageViewsPerUserValue = (decimal)y.Element(awsNs + "PageViews").Element(awsNs + "PerUser").Element(awsNs + "Value"), 
        pageViewsPerUserDeltaPercentage = decimal.Parse(((string)(y.Element(awsNs + "PageViews").Element(awsNs + "PerUser").Element(awsNs + "Delta"))).Split(new char[] {'%'}).FirstOrDefault()) 
       }).ToList(), 
       contributingSubdomain = x.Descendants(awsNs + "ContributingSubdomain").Select(y => new ContributingSubdomain() { 
        dataUrl = (string)y.Element(awsNs + "DataUrl"), 
        months = (int?)y.Descendants(awsNs + "Months").FirstOrDefault(), 
        days = (int?)y.Descendants(awsNs + "Days").FirstOrDefault(), 
        reachPercentage = decimal.Parse(((string)(y.Element(awsNs + "Reach").Element(awsNs + "Percentage"))).Split(new char[] { '%' }).FirstOrDefault()), 
        pageViewsPercentage = decimal.Parse(((string)(y.Element(awsNs + "PageViews").Element(awsNs + "Percentage"))).Split(new char[] { '%' }).FirstOrDefault()), 
        pageViewsPerUser = (decimal)y.Element(awsNs + "PageViews").Element(awsNs + "PerUser") 
       }).ToList() 
      }).FirstOrDefault(); 



     } 

     public string requestId { get; set; } 
     public ContentData contentData { get; set;} 
     public Dictionary<string, string> categoryData { get; set; } 
     public TrafficData trafficData { get; set; } 
    } 
    public class ContentData 
    { 
     public string urlType {get;set;} 
     public string url { get; set;} 
     public string title { get; set;} 
     public string description { get; set;} 
     public int linkCount { get;set;} 
     public List<string> keyWords { get; set;} 

    } 
    public class TrafficData 
    { 
     public int rank { get;set;} 
     public List<Statistics> statics { get; set;} 
     public List<ContributingSubdomain> contributingSubdomain { get; set; } 
    } 
    public class Statistics 
    { 
     public int? days { get; set; } 
     public int? months { get; set; } 
     public int rankValue { get; set;} 
     public int rankDelta { get;set;} 
     public int reachrankValue { get; set; } 
     public int reachRankDelta { get; set; } 
     public decimal reachPerMillionValue { get; set; } 
     public decimal reachPerMillionDeltaPercentage { get; set; } 

     public decimal pageViewsPerMillionValue { get; set; } 
     public decimal pageViewsPerMillionDeltaPercentage { get; set; } 
     public decimal pageViewsRankValue { get; set; } 
     public decimal pageViewsRankDelta { get; set; } 
     public decimal pageViewsPerUserValue { get; set; } 
     public decimal pageViewsPerUserDeltaPercentage { get; set; } 

    } 
    public class ContributingSubdomain 
    { 
     public string dataUrl { get; set; } 
     public int? months { get; set; } 
     public int? days { get; set; } 
     public decimal reachPercentage { get; set; } 
     public decimal pageViewsPercentage { get; set; } 
     public decimal pageViewsPerUser { get; set; } 

    } 


} 
0

Ich würde Ihnen empfehlen XPath zu verwenden, anstatt Knoten durch den Index der Referenzierung.

z. XPath, um die URL (ungetestet Code) zu erhalten:

var url = node.SelectSingleNode("//aws2:ContactInfo/aws2:DataUrl/text()); 

statt:

if(node.ChildNodes[i].Name== "aws:ContactInfo") 
{ 
    merchwebsite.WebsiteName=node.ChildNodes[i].ChildNodes[0].InnerText; 
}