使用HTML Agility Pack替换HTML div InnerText标记

时间:2012-02-01 09:53:45

标签: c# asp.net html-parsing html-agility-pack

我正在使用HTML Agility Pack来操作和编辑HTML文档。我想更改字段中的文本,例如:

<div id="Div1"><b>Some text here.</b><br></div>

我希望将此div中的文本更新为:

<div id="Div1"><b>Some other text.</b><br></div>

我尝试使用以下代码执行此操作,但它似乎不起作用,因为InnerText属性是只读的。

HtmlTextNode hNode = null;
hNode = hDoc.DocumentNode.SelectSingleNode("//div[@id='Div1']") as HtmlTextNode;
hNode.InnerText = "Some other text.";
hDoc.Save("C:\FileName.html");

我在这里做错了什么?如上所述,InnerText是一个只读字段,尽管它在文档中写有“获取或设置”。有没有另外一种方法可以做到这一点?

1 个答案:

答案 0 :(得分:9)

此处使用表达式://div[@id='Div1']选择div,而不是HtmlTextNode,因此hNode变量在您的示例中保留null

InnerText属性实际上是只读的,但HtmlTextNode具有属性Text,可用于设置必要的值。但在此之前你应该得到那个文本节点。这可以通过以下表达式轻松完成://div[@id='Div1']//b//text()

hNode = hDoc.DocumentNode
    .SelectSingleNode("//div[@id='Div1']//b//text()") as HtmlTextNode;
hNode.Text = "Some other text.";