使用 HTMLAgility pack 使用 c# 控制台应用从 Xpath 中提取值

本文关键字:使用 Xpath 提取 应用 HTMLAgility pack 控制台 | 更新日期: 2023-09-27 18:37:05

我有以下一行HTML代码,我用谷歌浏览器作为xpath。

<DIV id=TasheelPaymentCtrl1_dvPayment>
<TABLE border=1 cellSpacing=0 borderColor=black cellPadding=7 width=625 align=center>
<TBODY>
<TR>
<TD class=ReceiptHeadArbCenterHead1 width=320>المسمى </TD>
<TD class=ReceiptHeadArbCenterHead1 width=75>دفع إلى</TD>
<TD class=ReceiptHeadArbCenterHead1 width=75>القيمة</TD>
<TD class=ReceiptHeadArbCenterHead1 width=75>الكمية</TD>
<TD class=ReceiptHeadArbCenterHead1 width=75>المجموع</TD></TR>
<TR>
<TD class=ReceiptHeadArbCenterHead>رسوم وزارة العمل</TD>
<TD class=ReceiptValueArbCenter>MOFI</TD>
<TD class=ReceiptValueArbCenter>3</TD>
<TD class=ReceiptValueArbCenter>1</TD>
<TD class=ReceiptValueArbCenter>3</TD>
<TR>
<TD class=ReceiptHeadArbCenterHead>رسوم الدرهم الإلكتروني</TD>
<TD class=ReceiptValueArbCenter>MOFI</TD>
<TD class=ReceiptValueArbCenter>3</TD>
<TD class=ReceiptValueArbCenter>1</TD>
<TD class=ReceiptValueArbCenter>3</TD>
<TR>
<TD class=ReceiptHeadArbCenterHead>رسوم مراكز الخدمة </TD>
<TD class=ReceiptValueArbCenter>MOFI</TD>
<TD class=ReceiptValueArbCenter>47</TD>
<TD class=ReceiptValueArbCenter>1</TD>
<TD class=ReceiptValueArbCenter>47</TD>
<TR>
<TD class=ReceiptHeadArbCenterHead1 colSpan=4>المجموع</TD>
<TD class=ReceiptValueArbCenter>53</TD></TR></TBODY></TABLE></DIV>

我想提取值 3、3、47 和 53

我尝试使用此 xpath

 var gf = doc.DocumentNode.SelectNodes("//div[@id='TasheelPaymentCtrl1_dvPayment']/table/tbody/tr[2]/td[5]");
                foreach (var node in gf)
                {

                    Console.WriteLine(node.InnerText); //output: "3"
                }
                var sf = doc.DocumentNode.SelectNodes("//div[@id='TasheelPaymentCtrl1_dvPayment']/table/tbody/tr[3]/td[5]");
                foreach (var node in sf)
                {

                    Console.WriteLine(node.InnerText); //output: "3"
                }
                var tf = doc.DocumentNode.SelectNodes("//div[@id='TasheelPaymentCtrl1_dvPayment']/table/tbody/tr[4]/td[5]");
                foreach (var node in tf)
                {

                    Console.WriteLine(node.InnerText); //output: "47"
                }
var Allf = doc.DocumentNode.SelectNodes("//div[@id='TasheelPaymentCtrl1_dvPayment']/table/tbody/tr[5]/td[2]");
                foreach (var node in Allf )
                {

                    Console.WriteLine(node.InnerText); //output: "53"
                }

但是我得到空对象异常。我使用谷歌浏览器开发人员工具来复制xpath。我得到零点异常.如何提取价值..我的问题是为什么我得到空点引用异常,xpath 值是否有任何错误?请帮助我。

使用 HTMLAgility pack 使用 c# 控制台应用从 Xpath 中提取值

正如您所发现的,某些 XPath 表达式不起作用,因为<tr>标记并非全部关闭。

因此,您需要在 XPath 表达式中满足这一点:

  • //div[@id='TasheelPaymentCtrl1_dvPayment']/table/tbody/tr[2]/td[5] - 无变化
  • //div[@id='TasheelPaymentCtrl1_dvPayment']/table/tbody/tr[3]/td[5] - 应该//div[@id='TasheelPaymentCtrl1_dvPayment']/table/tbody/tr[2]/tr/td[5]
  • //div[@id='TasheelPaymentCtrl1_dvPayment']/table/tbody/tr[4]/td[5] - 应该//div[@id='TasheelPaymentCtrl1_dvPayment']/table/tbody/tr[2]/tr/tr/td[5]
  • //div[@id='TasheelPaymentCtrl1_dvPayment']/table/tbody/tr[5]/td[2] - 应该//div[@id='TasheelPaymentCtrl1_dvPayment']/table/tbody/tr[2]/tr/tr/tr/td[2]