HtmlAgilityPack을 사용하여 HtmlNode 내부의 HtmlNode 제거하기

c# html html-agility-pack nodes removechild

문제

번호 노드와 그 값을 집에서 어떻게 제거합니까?

문서 :

<number>123456</number>
<house> <number> </number>Red</house>
<house> <number>12</number>Blue</house>
<number>345345</number>
etc...

암호:

private void getHouse(string houseHtml)
{
    HtmlAgilityPack.HtmlDocument htmlDoc = new HtmlAgilityPack.HtmlDocument();

    htmlDoc.Load(new System.IO.StringReader(houseHtml));

    foreach (HtmlAgilityPack.HtmlNode house in htmlDoc.DocumentNode.SelectNodes("//house"))
    {
        MessageBox.Show(house.InnerText);
    }
}

결과:

 Red
12Blue

필수 결과

Red
Blue

나는 다음과 같이 사용하려고 노력했다 :

house.RemoveChild(house.SelectSingleNode("//number"));

및이 다른 조합을 "컬렉션에서 노드를 찾을 수 없습니다"또는 아무것도 실행됩니다. 집 태그 안의 숫자가 아니라 맨 위 숫자를 선택합니다.

수락 된 답변

노드를 직접 제거하지 않는 이유는 무엇입니까?

var numbers = htmlDoc.DocumentNode.SelectNodes("//house/number");
if (numbers != null) {
    foreach(var node in number) 
        node.Remove();
}

어쨌든 XPath가 모든 노드를 선택하는 이유는 현재 노드에 상대적인 경로를 제공해야하기 때문입니다.

house.SelectSingleNode("//number"); // wrong
house.SelectSingleNode(".//number"); // right


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