如何在 C# 代码中使用 indexof 从 HTML 解析/获取参数及其值

How to parse / get Parameter and its value from an HTML using indexof in c# code

如何在 c# 中使用 indexof 方法以编程方式从 HTML 字符串中检索子字符串。 这里 String HTML 是 html 的全部内容,想从 parseString 中检索入场日期值。现在这段代码从 HTML.Could 返回错误的内容,请在我的代码。

protected string ParseAdmissionDate(string Html)
{
  string parseString = "<TD style=\"HEIGHT: 5.08mm; \" class=\"a355c\"><DIV class=\"a355\">AdmissionDate</DIV></TD><TD class=\"a359c\"><DIV class=\"a359\">3/8/2021</DIV></TD>";
  int i = 0;
  i = Html.IndexOf(parseString, 0, Html.Length);

  if (i > 0)
  {
    i += parseString.Length;
    int end = Html.IndexOf("</TD>", i, (Html.Length - i));

    return Html.Substring(i, end - i);
  }
  else
    return null;
}

您应该考虑使用 HtmlAgilityPack 之类的库或进行网络 抓取

如果您真的想使用 IndexOf(出于未知原因),您必须记住 0 是一个有效结果(意味着您在索引 0 上找到了子字符串),它类似于

public static string ParseAdmissionDate(string Html)
{
  //html contains approximately
  //<TD style=\"HEIGHT: 5.08mm; \" class=\"a355c\"><DIV class=\"a355\">AdmissionDate</DIV></TD><TD class=\"a359c\"><DIV class=\"a359\">3/8/2021</DIV></TD>

  //Find Div of the AdmissionDate
  var searchPattern = ">AdmissionDate</DIV>";
  var searchIndex = Html.IndexOf(searchPattern, StringComparison.InvariantCultureIgnoreCase);
  if(searchIndex < 0) return null;

  //Get the string that is after the searchString
  var stringAfterSearchPattern = Html.Substring(searchIndex + searchPattern.Length);

  //Get the next close div after the searchString
  var endIndex = stringAfterSearchPattern.IndexOf("</DIV>", StringComparison.InvariantCultureIgnoreCase);
  if(endIndex < 0) return null;
  
  //Index of the opening div
  var startValueIndex = stringAfterSearchPattern.Substring(0, endIndex).LastIndexOf(">");
  if(startValueIndex < 0) return null;

  return stringAfterSearchPattern.Substring(startValueIndex + 1, endIndex - startValueIndex - 1);
}

问题在于,如果 html 稍作更改,例如,如果 AdmissionDate 不在 div 内(类似于“AdmissionDate”),则该方法将失败。 因此我指出了一个网络 scraping 库。