Xml节点值永不改变错误

Xml Node value never change error

我通过调用 Zoho Crm api 得到了这个 xml:https://ix-infiniti-preview.azurewebsites.net/Manage/zohotest.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 个结果。不确定这里发生了什么,请帮我解决这个问题。谢谢

在我得到你对字段的定义之前,我无法完全测试它。

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