0

我有两个具有内部 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,以便<!--more-->在前两段(或 Node1 中提供的任何 HTML 文本)之后添加标签(用于 WordPress 帖子)。

上述两个节点都有不同的父节点。在这种情况下,如何查找和替换或附加<!--more-->标签?我尝试运行以下代码,但出现错误:

代码:

node2.ParentNode.ReplaceChild(HtmlNode.CreateNode(node1.InnerHtml & "<!--more-->"), node1).InnerHtml

错误:

Node "

             " was not found in the collection
Parameter name: node

还尝试node1将 oldChild 部分更改为,HtmlNode.CreateNode(node1.InnerHtml)但这也不起作用。

4

2 回答 2

3

HtmlNode.InnerHtml我认为直接对属性执行替换会更容易:

node2.InnerHtml = node2.InnerHtml.Replace(
    node1.InnerHtml, 
    node1.InnerHtml + "<!--more-->"
);
于 2012-08-22T22:01:11.257 回答
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 );
于 2012-08-22T22:01:46.127 回答