나는 노드를 새로운 노드로 교체하고 싶다. 노드의 정확한 위치를 얻고 완전히 대체 할 수 있습니까?
나는 다음을 시도했지만, 노드의 인덱스 또는 부모 노드가 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);
}
동일한 솔루션을 구현하려면 다음 솔루션을 구현하십시오.
var htmlStr = "<b>bold_one</b><div class='LatestLayout'><div class='olddiv'><strong>strong</strong></div></div><b>bold_two</b>";
var htmlDoc = new HtmlDocument();
HtmlDocument document = new HtmlDocument();
document.Load(htmlStr);
htmlDoc.DocumentNode.SelectSingleNode("//div[@class='olddiv']").Remove();
htmlDoc.DocumentNode.SelectSingleNode("//div[@class='LatestLayout']").PrependChild(newChild)
htmlDoc.Save(FilePath); // FilePath .html file with full path if need to save file.
객체를 선택하고 각각의 HTML 객체를 제거
칠레로 추가합니다. 각 객체의.