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

Posted

技术标签:

【中文标题】使用 HTML Agility Pack 替换 HTML div InnerText 标签【英文标题】:Replacing a HTML div InnerText tag using HTML Agility Pack 【发布时间】:2012-02-24 00:19:07 【问题描述】:

我正在使用 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】:

这里使用了表达式://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.";

【讨论】:

以上是关于使用 HTML Agility Pack 替换 HTML div InnerText 标签的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 Html Agility Pack 使请求超时

Html Agility Pack:查找评论节点

如何使用 HTML Agility Pack 修复格式错误的 HTML?

csharp Html Agility Pack #CSharp #HtmlParsing

使用 Html Agility Pack 从 HTML BODY 节点中提取内部文本

HTML Agility Pack - 使用 Align=left 样式从 DIV 获取文本