【问题标题】:looping through same multiple nodes in an xml and merging numbers that are strings循环遍历 xml 中的相同多个节点并合并作为字符串的数字
【发布时间】:2015-10-22 02:55:22
【问题描述】:

我遇到了一个问题,我在一个 xml 账单中循环遍历多个相同的节点。当我循环遍历这些值并相应地合并它们时,我没有意识到数据类型是一个字符串。我需要一些帮助来合并/汇总作为字符串的数字。循环包含节点中包含的所有值,但我只显示我需要帮助的部分。

    private static ServiceAddressBillDetail GetServiceAccountUsageAndBillingDetail(string requestSA, string xmlBill, XmlNodeList detailPageNodes)
    {
        var saBillDetail = new ServiceAddressBillDetail();
        saBillDetail.UsageServiceName = requestSA;

        foreach (XmlNode detailPageNode in detailPageNodes)
        {

            if (totalSvcUseXMLNodes.Count > 0 && totalSvcUseXMLNodes[0].HasChildNodes)
            {

                var totalSvcNode = totalSvcUseXMLNodes[0].SelectSingleNode("IRBILGP_SA_TOTAL_KWH.SERVICE_ACCOUNT_STATEMENT");
                if (totalSvcNode == null)
                {
                    totalSvcNode = totalSvcUseXMLNodes[0].SelectSingleNode("IRBILGU_US_KWH_USAGE.USAGE");
                }
                saBillDetail.TotalServiceUsage = totalSvcNode.InnerText;                 
            }
        }
    }      

这就是我拥有它的方式,我认为数据类型是一个字符串。这种方式只是将值连接在一起。

    private static ServiceAddressBillDetail GetServiceAccountUsageAndBillingDetail(string requestSA, string xmlBill, XmlNodeList detailPageNodes)
    {
        var saBillDetail = new ServiceAddressBillDetail();
        saBillDetail.UsageServiceName = requestSA;

        foreach (XmlNode detailPageNode in detailPageNodes)
        {

            if (totalSvcUseXMLNodes.Count > 0 && totalSvcUseXMLNodes[0].HasChildNodes)
            {

                var totalSvcNode = totalSvcUseXMLNodes[0].SelectSingleNode("IRBILGP_SA_TOTAL_KWH.SERVICE_ACCOUNT_STATEMENT");
                if (totalSvcNode == null)
                {
                    totalSvcNode = totalSvcUseXMLNodes[0].SelectSingleNode("IRBILGU_US_KWH_USAGE.USAGE");
                }
                saBillDetail.TotalServiceUsage += totalSvcNode.InnerText;                 
            }
        }
    }

然后我尝试了类似的方法,我使用 int.Parse 并将结果添加回结果。但是我在result = result + int.Parse(totalSvcNode.InnerText); 中的第二个结果出现错误,说它是未分配的变量

    private static ServiceAddressBillDetail GetServiceAccountUsageAndBillingDetail(string requestSA, string xmlBill, XmlNodeList detailPageNodes)
    {
        var saBillDetail = new ServiceAddressBillDetail();
        saBillDetail.UsageServiceName = requestSA;

        foreach (XmlNode detailPageNode in detailPageNodes)
        {

            if (totalSvcUseXMLNodes.Count > 0 && totalSvcUseXMLNodes[0].HasChildNodes)
            {

                var totalSvcNode = totalSvcUseXMLNodes[0].SelectSingleNode("IRBILGP_SA_TOTAL_KWH.SERVICE_ACCOUNT_STATEMENT");
                if (totalSvcNode == null)
                {
                    totalSvcNode = totalSvcUseXMLNodes[0].SelectSingleNode("IRBILGU_US_KWH_USAGE.USAGE");
                }
                int result;


                //saBillDetail.TotalServiceUsage += totalSvcNode.InnerText;
                result = result + int.Parse(totalSvcNode.InnerText);

                saBillDetail.TotalServiceUsage = result.ToString();
            }

        }

    }

我被这个逻辑困住了,因为它不是两个不同的 TotalServiceUsage 我加在一起。它为找到的每个节点添加了相同的 TotalServiceUsage。我是一个相当新的程序员,任何帮助将不胜感激。

【问题讨论】:

    标签: c# xml c#-4.0 xml-parsing


    【解决方案1】:

    在您的最后一个示例中,int 结果需要在 for 循环之外进行初始化:

    int result =0;
    

    如果 TotalServiceUsage 是一个 int 你可以使用:

    saBillDetail.TotalServiceUsage += int.Parse(totalSvcNode.InnerText);
    

    【讨论】:

    • TotalServiceUsage 是一个字符串,这是我的问题@Neal
    • 你试过把 int result = 0;就在 foreach 循环之前?
    • 如果没有先用值初始化结果,你就不能有 result = result + what。
    猜你喜欢
    • 2011-09-11
    • 1970-01-01
    • 1970-01-01
    • 2020-02-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-06-22
    • 2015-01-04
    相关资源
    最近更新 更多