2017-05-11 7 views
1

を変更することはありません私はZohoののCRM APIを呼び出してから、このXMLを得た:https://ix-infiniti-preview.azurewebsites.net/Manage/zohotest.xmlのXmlノード値は、エラー

私はこのXMLの各行をループしたかったし、各行でのDataTableの行データを作成します。

  //Get List of fields 
      List<string> fields = data.Columns.Cast<DataColumn>() 
           .Select(x => x.ColumnName) 
           .ToList(); 

      List<MalformedLineException> exceptions = new List<MalformedLineException>(); 
      List<string> values = new List<string>(); 

      XmlDocument xmlDoc = new XmlDocument(); 
      xmlDoc.LoadXml(xmlData); 

      // Count number of row returned 
      XmlNodeList xmlNL = xmlDoc.GetElementsByTagName("row"); 
      int rowCount = xmlNL.Count; 

      for (int row = 1; row <= rowCount; row++) 
      { 
       DataRow currentRow = data.NewRow(); 
       XmlNodeList xnList = xmlDoc.SelectNodes("/response/result/" + moduleName +"/row[@no='" + row + "']"); 
       foreach (XmlNode xn in xnList) 
       { 
        foreach (string field in fields) 
        { 
         XmlNode objNode = xn.SelectSingleNode("//FL[@val='" + field + "']"); 
         if (objNode != null) 
         { 
          string value = objNode.InnerText; 
          currentRow[field] = value; 
         }      
        }     
       } 
       data.Rows.Add(currentRow); 
      } 
      data.EndLoadData(); 

コードのこの作品は、行1のために正常に動作し、完全にDataColumsにすべての値をマップ:これは私が思い付いたものです。しかし、行2(実際のxmlの他の18行)では、これらの行の値はすべて行1とまったく同じになります。したがって基本的には、結果として1行20行が表示されます。ここで何が起こっているのかわからないので、これで私を助けてください。おかげ

+0

フィールドは何に見えますか? yuurの "データ"の定義はどこですか? –

+0

data.Rows.Add(currentRow)の代わりに試してみましたか? data.LoadDataRow(currentRow、true)を使用します。 ? –

+0

なぜ 'xmlNL'ノードリストを使用せず、foreachを使ってそれらのノードをループさせますか? –

答えて

0

私はフィールドのあなたの定義を持ってまで、私は完全にこれをテスト傾けます。

 // You will need to ensure these are right 
     DataTable data = new DataTable(); 
     List<string> fields = new List<string>() 
     { 
      "LEADID", "SMOWNERID", "Lead Owner", "Company", "First Name", "Last Name", "Email", "Phone", "Lead Source", "Created By", "SMCREATORID", "MODIFIEDBY", "Modified By", "Created Time", "Modified Time", "Street", "City", "State", "Zip Code", "Last Activity Time", "Lead Type", "Practice name", "SMS Opt Out", "Send SMS" 
     }; 

     foreach (var field in fields) 
     { 
      DataColumn column = new DataColumn(field, typeof(String)); 
      data.Columns.Add(column); 
     } 

     string xmlText; 
     using (var client = new WebClient()) 
     { 
      IWebProxy defaultWebProxy = WebRequest.DefaultWebProxy; 
      defaultWebProxy.Credentials = CredentialCache.DefaultCredentials; 
      client.Proxy = defaultWebProxy; 

      xmlText = client.DownloadString(@"https://ix-infiniti-preview.azurewebsites.net/Manage/zohotest.xml"); 
     } 

     XmlDocument xmlDoc = new XmlDocument(); 
     xmlDoc.LoadXml(xmlText); 

     XmlNodeList xnList = xmlDoc.SelectNodes("/response/result/Leads/row"); 

     foreach (var row in xnList) 
     { 
      XmlElement item = row as XmlElement; 
      Debug.WriteLine(item.Attributes["no"].Value); 

      DataRow currentRow = data.NewRow(); 
      List<string> rowData = new List<string>(); 
      foreach (XmlElement node in item.ChildNodes) 
      { 
       if (fields.Contains(node.Attributes["val"].Value)) 
       { 
        Console.WriteLine(node.Attributes["val"].Value + ":" + node.InnerText); 

        currentRow[fields.IndexOf(node.Attributes["val"].Value)] = node.InnerText; 

       } 
      } 
      data.Rows.Add(currentRow); 
     } 

     data.AcceptChanges(); 
+0

リストフィールドは単に各FLノードのヴァル属性のリストです。例えばLEADID、SMOWNERID、リード所有者は、私が達成したいどのような会社、名、姓 –

+0

は、私は、XMLの終わりまで...その後内のすべてのノードを取得しなければならないことです。ですから、基本的にはxmlを20個の等しい部分に分けるようなものです - > 20 Data Table。 –

+0

そして、このコードはそれをしませんか? –

関連する問題