HtmlAgilityPack - 노드를 다른 노드로 바꾸기

asp.net c# html-agility-pack vb.net

문제

두 가지 노드가 내부 HTML이 이런 식으로 간다 :

Node1 :

<p>some text</p>
<p>some more text</p>

Node2 :

<p>some text</p>
<p>some more text</p>

처음 두 단락 (또는 Node1에 제공된 HTML 텍스트) 다음에 <!--more--> 태그 (WordPress 게시물 용)를 추가하기 위해 Node2에서 Node1을 조회하려고합니다.

위의 두 노드는 서로 다른 부모를가집니다. 이런 경우 <!--more--> 태그를 찾고 바꾸거나 추가 할 수 있습니까? 다음 코드를 실행 해 보았지만 오류가 발생했습니다.

암호:

<p>some text</p>
<p>some more text</p>

오류:

<p>some text</p>
<p>some more text</p>

또한 oldChild 부분에서 node1HtmlNode.CreateNode(node1.InnerHtml) 하려고했지만 그 중 하나가 작동하지 않았습니다.

수락 된 답변

나는 HtmlNode.InnerHtml 속성에서 직접 대체를 수행하는 것이 더 쉬울 것이라고 생각한다.

node2.InnerHtml = node2.InnerHtml.Replace(
    node1.InnerHtml, 
    node1.InnerHtml + "<!--more-->"
);

인기 답변

대체가 작동하지 않는 이유를 잘 모르겠지만 사용할 수있는 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 );



아래 라이선스: CC-BY-SA with attribution
와 제휴하지 않음 Stack Overflow
이 KB는 합법적입니까? 예, 이유를 알아보십시오.
아래 라이선스: CC-BY-SA with attribution
와 제휴하지 않음 Stack Overflow
이 KB는 합법적입니까? 예, 이유를 알아보십시오.