C#只替换文件中的一个东西

时间:2015-10-07 16:43:08

标签: c#

我制作了一个修改本地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的内部文字。

我该怎么做?

1 个答案:

答案 0 :(得分:4)

通过将HTML文档作为对象树而不是字符串的“blob”遍历,可以获得更好的成功。

话虽如此,使用HtmlDocument来做这件事会很痛苦,因为它没有提供一种通过类名,属性值等轻松反省的方法。话虽这么说,你可以调用{{1}并获取所有GetElementByTagName元素,并按td属性对其进行过滤。有点复杂,但我觉得可以管理。

我通常使用class库,它提供了许多更多的方法和对象,使您可以更轻松地找到html元素。强烈建议你使用它!