Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/xml/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 什么对象可以读取多个节点_C#_Xml - Fatal编程技术网

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

C# 什么对象可以读取多个节点,c#,xml,C#,Xml,我不确定我问的这个问题是否正确,所以请原谅我的错误。我对c#和一般的编码相当陌生。我有一些解析xml文档的代码(这是客户的账单)。我遇到了一个我正试图解决的问题。一位客户最近搬到了另一个地址,这导致他两次收到账单。生成的xml返回时包含多个相同的确切节点。因此,该法案只包含部分使用信息,而不是它应该拥有的所有信息。代码只检查一个节点。或者我假设在本例中,它使用第一个节点并使用该信息。我试图完成的是修改代码以检查多个相同的节点。然后能够解析所有节点 这是我在账单清单上的代码。如果它返回一个节点,那

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

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

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

然后,我相信我需要回到我发布的第一个代码片段的这一部分。我想我需要以某种方式将这部分代码放入一个循环中。这样它就可以检查所有多个相同的节点。我一直在想怎么做

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


我对这一点还是相当陌生的,我正试图自己去理解和解决这个问题。如果这没有多大意义,那么很抱歉。

您想要的功能已经存在,您想要的只是程序员已经为您找到的
节点
值!因此,您只需删除一些代码并更改返回值:

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);
var saDetailedPageNodes=XmlBillParser.GetDetailPageSectionBySa(requestSa,xmlBill);
如果(saDetailedPageNodes.Count==0)继续;
var customerBill=新customerBill();
customerBill.issureruit=XmlBillParser.GetSurepayFlagFromBill(文档);
customerBill.ServiceAddress=XmlBillParser.GetServiceAddress(requestSa,文档);
customerBill.monthName=XmlBillParser.GetnillStatementDate(requestSa,xmlBill);
customerBill.EqCurlPlanBal=XmlBillParser.getEqualizerCurrentPlanBalance(文档);
customerBill.EqPymntDue=XmlBillParser.getEqualizerPaymentDue(文档);
对于(int i=0;i
您想要的功能已经存在,您想要的只是程序员已经为您找到的
节点
值!因此,您只需删除一些代码并更改返回值:

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);
var saDetailedPageNodes=XmlBillParser.GetDetailPageSectionBySa(requestSa,xmlBill);
如果(saDetailedPageNodes.Count==0)继续;
var customerBill=新customerBill();
customerBill.issureruit=XmlBillParser.GetSurepayFlagFromBill(文档);
customerBill.ServiceAddress=XmlBillParser.GetServiceAddress(requestSa,文档);
customerBill.monthName=XmlBillParser.GetnillStatementDate(requestSa,xmlBill);
customerBill.EqCurlPlanBal=XmlBillParser.getEqualizerCurrentPlanBalance(文档);
customerBill.EqPymntDue=XmlBillParser.getEqualizerPaymentDue(文档);
对于(int i=0;i
尝试使用Linq转换xml尝试使用Linq转换xml好的,非常感谢。完成后,我是否需要对代码的其余部分执行实际解析/我认为需要循环执行该操作?我可能在工作是的,你需要给我看那部分,告诉我它在哪里调用这个函数好的,如果所有节点都在同一个账单中。。。我该怎么做呢?好的,太好了,谢谢你。完成后,我是否需要对代码的其余部分执行实际解析/我认为需要循环执行该操作?我可能在工作是的,你需要给我看那部分,告诉我它在哪里调用这个函数好的,如果所有节点都在同一个账单中。。。我该怎么做呢。