如何在 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 库。
如何在 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 内(类似于“