什么对象可以读取多个节点

本文关键字:节点 读取 对象 什么 | 更新日期: 2023-09-27 18:00:36

我不确定我问这个问题是否正确,所以如果我没有,请提前原谅我。一般来说,我对c#和编码还相当陌生。我有一些代码可以解析xml文档(这是客户的账单)。我遇到了一个我正在尝试解决的问题。一位客户最近搬到了另一个地址,这导致他收到了两次账单。生成的xml返回时带有多个完全相同的节点。因此,该法案只包含部分使用信息,而不是它应该包含的所有信息。该代码只检查一个节点。或者我假设在这种情况下,它取第一个节点并使用该信息。我试图完成的是修改我的代码,以检查多个相同的节点。然后能够解析所有节点。

这是我在账单列表中的代码。如果它返回一个节点,那么它将解析xml中的信息。

以下是检查xml中是否存在节点的方法。如果大于0,则返回节点。我认为我需要更改对象Xmlnode,因为它只代表XML文档中的单个节点。有没有另一个可以用来表示多个节点的对象?以及我如何修改此方法以检查多个节点并返回它。

然后我认为我需要回到我发布的第一个片段中的这部分代码。我想我需要以某种方式将这部分代码放入循环中。以便它检查所有多个相同的节点。我纠结于如何做这个

我不能发布图片,因为我是新人,还没有任何声誉投票,所以我只想把它打出来,这样你就可以看到我在说什么了。这通常是xml的样子,这对于一个DetailPage_Section节点来说是正常的。

再说一次,我对这个问题还很陌生,我正在努力自己理解和解决这个问题。很抱歉,如果这没有多大意义。

什么对象可以读取多个节点

您想要的功能已经存在,您想要的只是程序员已经为您找到的nodes值!所以你所要做的就是删除一些代码并更改你的返回值:

public static XmlNodeList GetDetailPageSectionBySa(string sa, string statementXml)
{
    XmlDocument document = new XmlDocument();
    document.LoadXml(statementXml);
    string requestSa = sa.PadLeft(9, '0');
    string xpath = String.Format("//Para[IRBILGP_SA_SAA_ID_PRINT.SERVICE.ACCOUNT.STATMENT='{0}S{1}']/..", requestSa.Substring(0, 4), requestSa.Substring(4));
    return document.SelectNodes(xpath);
    if(!SaExistInBill(requestSa, statementXml)) return null;
    var node = GetDetailPageSectionByBillPrisminfoIndex(sa, statementXml);
    if (node != null) return node;
    return null;
}

所有节点都在同一账单中:

var saDetailedPageNodes = XmlBillParser.GetDetailPageSectionBySa(requestSa, xmlBill);
if (saDetailedPageNodes.Count == 0) continue;
var customerBill = new CustomerBill();
customerBill.IsSurepay = XmlBillParser.GetSurepayFlagFromBill(document);
customerBill.ServiceAddress = XmlBillParser.GetServiceAddress(requestSa, document);
customerBill.monthName = XmlBillParser.GetnillStatementDate(requestSa, xmlBill);
customerBill.EqCurlPlanBal = XmlBillParser.getEqualizerCurrentPlanBalance(document);
customerBill.EqPymntDue = XmlBillParser.getEqualizerPaymentDue(document);
for (int i = 0; i < saDetailedPageNodes.Count; i++)
{
    // customerBill.Service needs to be an array or list
    customerBill.Service.Add(GetServiceAccountUsageAndBillingDetail(requestSa, xmlBill, saDetailedPageNode[i]));
}
response.Add(customerBill);