【问题标题】:cast or convert XmlNodeList to XmlNode将 XmlNodeList 强制转换或转换为 XmlNode
【发布时间】:2015-09-27 01:12:54
【问题描述】:

我的代码有问题,希望能得到您的帮助。我有一个 XmlNodeList (GetDetailPageSectionBySA) 类型的方法,现在该方法用作另一个方法中的参数之一。但是该方法 (GetServiceAccountusageAndBillingDetail) 需要该参数 (saDetailedPageNode) 的 XmlNode 类型。如果我将该参数的数据类型更改为 XmlNodeList,那么它会在只能使用 XmlNode 的行中弄乱一大堆东西。

我为什么不直接将第一个方法(GetDetailPageSectionBySA)的类型更改为 XmlNode 并解决您提出的所有问题?因为该类型只能返回一个节点,而该方法返回节点的集合,需要使用 XmlNodeList。

所以我只是想知道是否有任何方法可以将 XmlNodeList 转换或强制转换为 XmlNode,如果有,它是如何完成的?

foreach (GetBillForCAResponse eBillResponse in eBillResponseList)
{
   var statementDetailsResponse = GetStatementDetails(
       new GetStatementDetailsRequest
       {
           BatchId = eBillResponse.BatchId,
           CustomerAccountId = eBillResponse.CA.ToString("000000000"),
           StatementId = eBillResponse.CAS_NUM.ToString("0000")
       });

   string xmlBill = statementDetailsResponse.StatementAsXML.ToString();
   var document = new XmlDocument();
   document.LoadXml(xmlBill);

   ****var saDetailedPageNode = XmlBillParser.GetDetailPageSectionBySA(requestSA, xmlBill);// This is the method of type XmlNodeList
   if (saDetailedPageNode == null) continue;

   var customerBill = new CustomerBill();
   customerBill.IsSurepay = XmlBillParser.GetSurepayFlagFromBill(document);
   customerBill.ServiceAddress = XmlBillParser.GetServiceAddress(requestSA, document);
   customerBill.MonthName = XmlBillParser.GetBillStatementDate(requestSA, xmlBill);
   customerBill.EqCurPlanBal = XmlBillParser.GetEqualizerCurrentPlanBalance(document);
   customerBill.EqPymntDue = XmlBillParser.GetEqualizerPaymentDue(document);

   ****customerBill.Service = GetServiceAccountUsageAndBillingDetail(requestSA, xmlBill, saDetailedPageNode);// This is where the invalid argument is because saDetailedPageNode should be of type XmlNode
   response.Add(customerBill);
}

我已经在问题所在的地方加上了 **** 以及这些行上的 cmets。我是编码初学者,任何帮助都会很棒。提前致谢。

【问题讨论】:

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


    【解决方案1】:

    没有将XmlNodeList 转换为XmlNode 这样的事情。顾名思义,XmlNodeListXmlNodes 的列表。因此,如果您想对列表中的XmlNodes 执行某些操作,您将必须遍历列表并对该列表中的每个节点执行一些操作。

    在您的情况下,我怀疑 GetDetailPageSectionBySA 可能会从账单中返回多个部分。如果是这样,您可以添加一个foreach 循环:

    foreach (GetBillForCAResponse eBillResponse in eBillResponseList)
    {
       // removed code for brevity
    
       foreach(var saDetailedPageNode =x mlBillParser.GetDetailPageSectionBySA(requestSA, xmlBill)
       {
           var customerBill = new CustomerBill();
           customerBill.IsSurepay = XmlBillParser.GetSurepayFlagFromBill(document);
           customerBill.ServiceAddress = XmlBillParser.GetServiceAddress(requestSA, document);
           customerBill.MonthName = XmlBillParser.GetBillStatementDate(requestSA, xmlBill);
           customerBill.EqCurPlanBal = XmlBillParser.GetEqualizerCurrentPlanBalance(document);
           customerBill.EqPymntDue = XmlBillParser.GetEqualizerPaymentDue(document);
    
           customerBill.Service = GetServiceAccountUsageAndBillingDetail(requestSA, xmlBill, saDetailedPageNode)
           response.Add(customerBill);
        }
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-07-20
      • 2010-09-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-17
      • 1970-01-01
      相关资源
      最近更新 更多