HtmlAgilityPack 집합 노드 InnerText

c# html-agility-pack html-parsing parsing

문제

HTML 태그의 내부 텍스트를 다른 텍스트로 바꾸고 싶습니다. 나는 HtmlAgilityPack을 사용하고있다.
이 코드를 사용하여 모든 텍스트를 추출합니다.

HtmlDocument doc = new HtmlDocument();
doc.Load("some path")

foreach (HtmlNode node in doc.DocumentNode.SelectNodes("//text()[normalize-space(.) != '']")) {
    // How to replace node.InnerText with some text ?
}

그러나 InnerText는 읽기 전용입니다. 텍스트를 다른 텍스트로 대체하고 파일에 저장하려면 어떻게합니까?

수락 된 답변

아래 코드를 시도하십시오. 자식 노드가없는 모든 노드를 선택하고 필터링 된 스크립트 노드를 필터링합니다. 어쩌면 추가 필터링을 추가해야 할 수도 있습니다. XPath 표현식 외에도 리프 노드를 찾고 <script> 태그의 텍스트 내용을 필터링합니다.

var nodes = doc.DocumentNode.SelectNodes("//body//text()[(normalize-space(.) != '') and not(parent::script) and not(*)]");
foreach (HtmlNode htmlNode in nodes)
{
    htmlNode.ParentNode.ReplaceChild(HtmlTextNode.CreateNode(htmlNode.InnerText + "_translated"), htmlNode);
}

인기 답변

이상하지만 InnerHtml은 읽기 전용이 아닙니다. 그리고 내가 그것을 설정하려고 할 때

aElement.InnerHtml = "sometext";

InnerText 의 값도 "sometext" 변경되었습니다.




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