我制作了一个修改本地html页面并替换其中某个值的程序,如下所示:
string j = Microsoft.VisualBasic.Interaction.InputBox("Replace " + listView2.SelectedItems[0].Text + "/" + intlstv2.ToString() + " With?");
var links = webBrowser1.Document.GetElementsByTagName("td");
foreach(HtmlElement lnk in links)
{
if (lnk.GetAttribute("className") == "point" && lnk.InnerText == listView2.SelectedItems[0].Text || lnk.GetAttribute("className") == "point tekort" && lnk.InnerText == listView2.SelectedItems[0].Text)
{
MessageBox.Show(lnk.InnerText);
MessageBox.Show("Replacing with: " + j.ToString());
System.IO.File.WriteAllText("Fin.html", this.webBrowser1.DocumentText);
System.IO.File.WriteAllText("Fin.html", System.IO.File.ReadAllText("Fin.html").Replace(lnk.InnerText, j));
}
}
在html文件中:
<td class="point">14,5</td> <---- Value that I want replaced
<td class="average" title="Med">14,5</td> <---- Value that I want to keep
在listview 2中选择的值= 14,5但我遇到的问题是在html中,14,5存在两次(一次为类名点,第二次为类名med)只想替换classname点的innertext而不改变med的内部文字。
我该怎么做?
答案 0 :(得分:4)
通过将HTML文档作为对象树而不是字符串的“blob”遍历,可以获得更好的成功。
话虽如此,使用HtmlDocument
来做这件事会很痛苦,因为它没有提供一种通过类名,属性值等轻松反省的方法。话虽这么说,你可以调用{{1}并获取所有GetElementByTagName
元素,并按td
属性对其进行过滤。有点复杂,但我觉得可以管理。
我通常使用class
库,它提供了许多更多的方法和对象,使您可以更轻松地找到html元素。强烈建议你使用它!