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失败?

请。。帮助

感谢

XPATH输入型收音机;t工作c#

我被纠正了。如果SelectNodes找不到任何节点,则返回null

但是您所看到的行为与id属性无关(事实上,删除id属性会导致异常提前发生),而一切都与您的代码有关。

在你的内部循环结束时,你正在这样做:

getInputSchedule[i].Remove();

其从HTML文档中移除CCD_ 6元素。

您的外循环设置为执行四次,所以第二次执行时,input元素已经不存在,doc.DocumentNode.SelectNodes("//table//input")返回null,这就是错误的原因。

我真的不知道为什么在浏览文档时要从文档中删除input元素,或者为什么要循环浏览整个文档4次,但希望这能让你朝着正确的方向前进。