我有两个内部HTML的节点,如下所示:
节点1:
<p>some text</p>
<p>some more text</p>
节点2:
<p>some text</p>
<p>some more text</p>
<div><p>lots of more paragraphs here</p></div>
我正在尝试在Node2中查找Node1,以便在前两段(或Node1中提供的任何HTML文本)之后添加<!--more-->
标记(对于WordPress帖子)。
上述两个节点都有不同的父节点。在这种情况下,如何找到并替换或以其他方式附加<!--more-->
标签?我尝试运行以下代码,但它出错:
代码:
node2.ParentNode.ReplaceChild(HtmlNode.CreateNode(node1.InnerHtml & "<!--more-->"), node1).InnerHtml
错误:
Node "
" was not found in the collection
Parameter name: node
还尝试将oldChild部分中的node1
标记为HtmlNode.CreateNode(node1.InnerHtml)
,但这也不起作用。
答案 0 :(得分:3)
我认为直接在HtmlNode.InnerHtml
属性上执行替换会更容易:
node2.InnerHtml = node2.InnerHtml.Replace(
node1.InnerHtml,
node1.InnerHtml + "<!--more-->"
);
答案 1 :(得分:0)
不确定为什么替换不起作用,但是可以使用InsertAfter方法。
const string html = @"<p>some text</p>
<p>some more text</p>
<div><p>lots of more paragraphs here</p></div>";
var doc = new HtmlDocument();
doc.LoadHtml(html);
var secondParagraph = doc.DocumentNode.SelectSingleNode("//p[2]");
// var secondParagraph = doc.DocumentNode.Descendants("p").Skip(1).First(); //or Linq
var moreNode= HtmlNode.CreateNode("<!--more-->");
doc.DocumentNode.InsertAfter(moreNode,secondParagraph );