Html-Agility-Pack을 사용하여 InnerText를 설정할 수 없습니다.

html-agility-pack

문제

HTML 문서가 주어지면 문서의 모든 숫자를 식별하고 숫자 주위에 사용자 정의 태그를 추가하려고합니다. 바로 지금, 나는 다음을 사용한다.

HtmlNodeCollection bodyNode = htmlDoc.DocumentNode.SelectNodes("//body");
MatchCollection numbersColl = Regex.Matches(htmlNode.InnerText, <some regex>);

일단 numbersColl을 얻으면 각 Match를 탐색하여 색인을 얻을 수 있습니다. 그러나 InnerText는 읽기 전용이므로 변경할 수 없습니다. 필요한 것은 match.Value = 100이고 match.Index = 25 인 경우 해당 25를 <span isIdentified='true'> 25 </span> 로 바꾸고 싶습니다.

이것에 대한 도움을 주시면 대단히 감사하겠습니다. 현재, 내부 텍스트를 수정할 수 없기 때문에 InnerHtml을 수정해야하지만 일부 요소는 innerHtml에 25 개가있을 수 있습니다. 그것은 만져서는 안됩니다. 그러나 그 숫자가 html 태그 안에 있는지를 어떻게 알 수 있습니까? 즉, <table border = '1'>은 태그에 1을가집니다.

수락 된 답변

Text 노드의 InnerText 속성에 대한 읽기 전용 속성 제한을 해결하기 위해 수행 한 작업은 Text 노드의 Parent 노드를 선택하고 Parent 노드의 자식 노드 컬렉션에서 Text 노드의 인덱스를 확인하는 것입니다. 그런 다음 ReplaceChild(...) .

       private void WriteText(HtmlNode node, string text)
        {
            if (node.ChildNodes.Count > 0)
            {
                node.ReplaceChild(htmlDocument.CreateTextNode(text), node.ChildNodes.First());
            }
            else
            {
                node.AppendChild(htmlDocument.CreateTextNode(text));
            }
        }

귀하의 경우에는 텍스트를 HtmlElement로 래핑 한 새로운 Element 노드를 만든 다음 Text 노드를 대신 사용하는 새로운 Element 노드를 만들어야한다고 생각합니다.

또는 더 나은 경우, 여기에 게시 된 답변과 같은 것을 할 수 있는지 확인하십시오. HTML div 애너 팩을 사용하여 HTML div InnerText 태그 바꾸기


인기 답변

textnode를 만드는 것은이 경우에해야 할 일이 아닙니다 :

myParentNode.AppendChild(D.CreateTextNode("<script>alert('a');</script>"));
Console.Write(myParentNode.InnerHtml);

결과는 & lt; script ....와 같아야합니다.

하지만 그것은 "TEXT"로 html로 추가하더라도 작업 스크립트 작업입니다. 익명의 사용자가 텍스트를 입력하기 때문에 보안 문제가 발생합니다.



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