【发布时间】:2014-10-18 17:28:23
【问题描述】:
我目前正在研究如何在所选标签之外插入 HTML 标签。
我在 HtmlDocument 上加载的是一个包含“一些”HTML 标记的文本文件。它不是包含标签的 HTML 文档,而是带有“一些”HTML 标签的文本文件。
这是文本文件的示例内容
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Maecenas vel risus id velit iaculis elementum egestas vel purus. Vestibulum ante ipsum primis in <a href="http://www.domain.com">this domain</a> faucibus orci luctus et ultrices posuere cubilia Curae; In lorem enim, dignissim id congue at, malesuada vitae sem. Phasellus et nibh venenatis, vulputate elit ut, consectetur tellus.
Sed placerat ex et dolor lobortis convallis. Nulla tincidunt elementum elementum. Integer lacinia elementum orci, ac pretium lacus hendrerit eu. Donec vitae lorem leo. Curabitur placerat sagittis nisi eu posuere. Vestibulum eget felis nisi. Nunc vitae enim iaculis, <a href="http://www.domain.com">this domain</a> maximus justo ullamcorper, imperdiet felis. Vestibulum vestibulum sapien id diam dapibus pharetra. Pellentesque varius purus justo, a vehicula lectus semper at.
那里有两个 A 标签,我的 xpath 就像“//a”一样简单。我的目标是用 B、U 或 I 来装饰 A 标签。输出会像
<b><u><a href="http://www.domain.com">this domain</a></u></b>
我希望 HtmlNode.InsertBefore 会有所帮助,但发生的事情是这样的
<a href="http://www.domain.com">this domain<b></b><u></u></a>
如果使用 HtmlNode.InsertAfter,它看起来像这样
<a href="http://www.domain.com"><b></b><u></u>this domain</a>
InsertBefore和InsertAftere都需要一个引用节点,没有引用节点所以我设置为null
这是示例代码
HtmlDocument doc = new HtmlDocument();
doc.LoadHtml(this.document);
HtmlNodeCollection nodcoll = doc.DocumentNode.SelectNodes("//a");
if (nodcoll != null)
{
foreach (HtmlNode nod in nodcoll)
{
// nod.InsertAfter(HtmlNode.CreateNode(newhtml), null);
// nod.InsertBefore(HtmlNode.CreateNode(newhtml), null);
}
}
更新 我忘了提到这是 SEO 对格式化 A 标签的偏好。如果格式在 A 标签内,那就容易多了
【问题讨论】:
-
使用 jQuery 遍历 DOM 是一件轻而易举的事 :)
标签: c# html html-agility-pack