- r - 以节省内存的方式增长 data.frame
- ruby-on-rails - ruby/ruby on rails 内存泄漏检测
- android - 无法解析导入android.support.v7.app
- UNIX 域套接字与共享内存(映射文件)
我想用一个新节点替换一个节点。如何获取节点的确切位置并进行完整替换?
我已经尝试了以下方法,但我无法弄清楚如何获取节点的索引或调用 ReplaceChild()
的父节点。
string html = "<b>bold_one</b><strong>strong</strong><b>bold_two</b>";
HtmlDocument document = new HtmlDocument();
document.LoadHtml(html);
var bolds = document.DocumentNode.Descendants().Where(item => item.Name == "b");
foreach (var item in bolds)
{
string newNodeHtml = GenerateNewNodeHtml();
HtmlNode newNode = new HtmlNode(HtmlNodeType.Text, document, ?);
item.ParentNode.ReplaceChild( )
}
最佳答案
要创建一个新节点,使用HtmlNode.CreateNode()
工厂方法,不要直接使用构造函数。
这段代码应该适合你:
var htmlStr = "<b>bold_one</b><strong>strong</strong><b>bold_two</b>";
var doc = new HtmlDocument();
doc.LoadHtml(htmlStr);
var query = doc.DocumentNode.Descendants("b");
foreach (var item in query.ToList())
{
var newNodeStr = "<foo>bar</foo>";
var newNode = HtmlNode.CreateNode(newNodeStr);
item.ParentNode.ReplaceChild(newNode, item);
}
请注意,我们需要在查询中调用 ToList()
,我们将修改文档,如果不这样做,它将失败。
如果你想用这个字符串替换:
"some text <b>node</b> <strong>another node</strong>"
问题是它不再是单个节点而是一系列节点。您可以使用 HtmlNode.CreateNode()
很好地解析它,但最后,您只引用了序列的第一个节点。您需要使用父节点进行替换。
var htmlStr = "<b>bold_one</b><strong>strong</strong><b>bold_two</b>";
var doc = new HtmlDocument();
doc.LoadHtml(htmlStr);
var query = doc.DocumentNode.Descendants("b");
foreach (var item in query.ToList())
{
var newNodesStr = "some text <b>node</b> <strong>another node</strong>";
var newHeadNode = HtmlNode.CreateNode(newNodesStr);
item.ParentNode.ReplaceChild(newHeadNode.ParentNode, item);
}
关于c# - HtmlAgilityPack 替换节点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6782500/
HTML En son haber 01:029.023 代码 Dim request2 As HttpWebRequest = WebRequest.C
我正在使用 HtmlAgilityPack。我使用以下字符串创建一个 HtmlDocument 和 LoadHtml: OneTwo 这会做一些意想不到的事情。首先,它给出了两个解析器错误,EndTa
我需要从博客中获取一些帖子。一切都很顺利,直到我想获得帖子创建日期。它的 DOM 树是: div class="stories-feed__container" -> article -
我需要获取网页上的总字数。这个方法返回的数字是336。但是当我从wordcounter.net手动查看时,大约是1192个字。我怎样才能得到文章的字数? int kelimeSayisi()
使用 HtmlAgilityPack 和 c# 4.0 如何确定页面是否被重定向。我正在使用这种方法来加载页面。 HtmlDocument hdMyDoc = hwWeb.Load(srPageUrl
我正在尝试使用 HtmlAgilityPack 获取计时器的值,但是当我通过元素 ID 获取内部文本时,它会返回 --:--:-- 既然使用了AJAX,有什么方法可以获取时间值吗? 最佳答案 通过使用
jQuery改变后是否可以获取HtmlDocument?例如,在下次更改后通过“myId”获取元素。 js代码: $(document).ready(function () { $("#myC
我有以下 html 元素: MyString buttonText So,
我的目标是从网站上读出特定的容器/标签/属性(出于我的爱好),一切正常,除了为我的值(value)获取德语翻译(我通常在浏览器中手动打开网站时得到(可能是网站从用户代理获取特定信息),但如果我使用我的
是否可以在使用 HTMLAgilityPack 时忽略解析错误? 最佳答案 作为suggested by TrueWill ,您可能需要先清理 HTML,然后再尝试使用 HTMLAgilityPack
我正在使用 HtmlAgilityPack 在 C# Asp.Net 中执行 Scraping,到目前为止,我在从多个 Web 执行 Scratch 时没有遇到问题,但是,尝试弹出以下代码时出现错误
我在服务器上的解析器中使用 HTMLAgilityPack,但我正在解析的其中一个网站出现问题:每天早上 6 点左右,他们往往会关闭服务器进行维护,这会抛出 HTMLWeb 的 Load() 方法,并
这是我的html代码。如何在每个 div 标签后选择第一个链接(a) 我试过只使用一个斜杠://div[@class="test
我有异常抛出 gzip 不受支持。这就是我使用加载页面的全部内容,关于如何允许 gzip 的任何想法? HtmlWeb hwObject = new HtmlWeb();
我正在 SharePoint Foundation 中开发 C# ASP .NET WebPart。 一切正常,现在我想解析一个 HTML 页面以获取所有 ImagePaths 并将图像保存在 HD/
我一直在尝试使用 Html Agility Pack 在 Html 中附加一个新节点。 这是我的示例 Html
我想用这段代码解析一个 html 文件: ...... 问题是 HtmlAgilityPack 会自动关闭 div 结束标记之前的表单标记: ......所以当我解析表单时,一些表单元素丢失了。 (我
一般来说,我经常处理 html,并且总是使用 Regex 来获取结果。不过,每次我寻求帮助时,每个人都建议使用 HTML 解析器,例如 HTMLAgilitypack。 我刚刚试过了,伙计,现在对我来
当我删除一个节点(使用 keepGrandChildren )时,该节点同时包含文本和子节点,文本将一直推到子节点之后,而不是留在其原始位置。 示例: var doc = new HtmlDocume
我使用这段代码来获取页面信息但是现在站点已经更改并且我的应用程序返回空错误。 HtmlAgilityPack.HtmlDocument doc = new HtmlAgilityPack.HtmlDo
我是一名优秀的程序员,十分优秀!