XPATH输入型收音机;t工作c#
本文关键字:工作 输入型 收音机 XPATH | 更新日期: 2023-09-27 18:00:23
这是我的代码
private DataTable ParseTable(string html)
{
HtmlDocument doc = new HtmlDocument();
DataTable dt = new DataTable();
String[] datasc;
String[] valueTemp = new String[30];
int index;
doc.LoadHtml("<table><tr><td><p><input id='"ControlGroupScheduleSelectView_AvailabilityInputScheduleSelectView_RadioButtonMkt1Fare7'" type='"radio'" name='"ControlGroupScheduleSelectView$AvailabilityInputScheduleSelectView$market1'" value='"0~N~~N~RGFR~~1~X|QG~ 885~ ~~BTH~05/19/2014 07:00~KNO~05/19/2014 08:20~'" />Rp.445,000 ( N/Cls;4 )</p></td></tr></table>");
for (int z = 0; z < 4; z++)
{
var getInputSchedule = doc.DocumentNode.SelectNodes("//table//input");
datasc = new String[getInputSchedule.Count];
for (int i = 0; i < getInputSchedule.Count; i = i+1)
{
string removeClassFare = string.Empty;
String[] selectValueSplit = getInputSchedule[i].Attributes["value"].Value.Split('|');
valueTemp[i] = selectValueSplit[1];
String[] getAlphaSC = selectValueSplit[0].Split('~');
try
{
index = getInputSchedule[i].ParentNode.InnerText.IndexOf("(");
if (index != -1)
{
removeClassFare = getInputSchedule[i].ParentNode.InnerText.Substring(0, index);
removeClassFare = System.Text.Encoding.ASCII.GetString(System.Text.Encoding.ASCII.GetBytes(removeClassFare)).Replace("??", "").Replace("Rp.", "").Trim();
}
}
catch (Exception e) {
//removeClassFare = getInputSchedule[i].ParentNode.InnerText;
}
if (!dt.Columns.Contains(getAlphaSC[1]))
{
dt.Columns.Add(getAlphaSC[1], typeof(string));
}
if (i == 0)
{
datasc[i] = "<div align='"center'"><input <input onclick='faredetail(this.value, this.name)' id='"" + getInputSchedule[i].Attributes["id"].Value + "'" type='"radio'" value='"" + getInputSchedule[i].Attributes["value"].Value + "'" name='"" + getInputSchedule[i].Attributes["name"].Value + "'"><br>" + removeClassFare + "</div>";
}
else
{
if (selectValueSplit[1].Equals(valueTemp[i - 1],StringComparison.Ordinal))
{
datasc[i] = "<div align='"center'"><input <input onclick='faredetail(this.value, this.name)' id='"" + getInputSchedule[i].Attributes["id"].Value + "'" type='"radio'" value='"" + getInputSchedule[i].Attributes["value"].Value + "'" name='"" + getInputSchedule[i].Attributes["name"].Value + "'"><br>" + removeClassFare + "</div>";
}
else
{
break;
}
}
getInputSchedule[i].Remove();
}
datasc = datasc.Where(x => !string.IsNullOrEmpty(x)).ToArray();
dt.Rows.Add(datasc);
}
return dt;
}
如果我运行,则会出现错误消息"Object reference not set to a instance of a Object。",但如果我删除元素(如)的ID
doc.LoadHtml("<table><tr><td><p><input type='"radio'" name='"ControlGroupScheduleSelectView$AvailabilityInputScheduleSelectView$market1'" value='"0~N~~N~RGFR~~1~X|QG~ 885~ ~~BTH~05/19/2014 07:00~KNO~05/19/2014 08:20~'">Rp.445,000 ( N/Cls;4 )</p></td></tr></table>");
一切正常。为什么ID属性会导致XPath失败?
请。。帮助
感谢
我被纠正了。如果SelectNodes
找不到任何节点,则返回null
。
但是您所看到的行为与id
属性无关(事实上,删除id
属性会导致异常提前发生),而一切都与您的代码有关。
在你的内部循环结束时,你正在这样做:
getInputSchedule[i].Remove();
其从HTML文档中移除CCD_ 6元素。
您的外循环设置为执行四次,所以第二次执行时,input
元素已经不存在,doc.DocumentNode.SelectNodes("//table//input")
返回null
,这就是错误的原因。
我真的不知道为什么在浏览文档时要从文档中删除input
元素,或者为什么要循环浏览整个文档4次,但希望这能让你朝着正确的方向前进。