NameSpace 관리자 또는 XSLContent는 aspx 페이지를 구문 분석합니다.

asp.net c# html-agility-pack linq

문제

NameSpace Manager 또는 XsltContent를 사용하여 aspx 페이지를 구문 분석하려면 어떻게합니까?

HtmlAgilityPack을 사용하고 있습니다.

Button과 Label 컨트롤 ID를 얻기 위해 aspx 페이지를 파싱하려고합니다. asp : Button 요소가있는 노드를 선택하려고하면 다음 오류가 발생합니다.

다음은 오류 메시지입니다.

네임 스페이스 관리자 또는 XsltContext가 필요합니다. 이 쿼리에는 접두사, 변수 또는 사용자 정의 함수가 있습니다.

        HtmlAgilityPack.HtmlDocument htmlDoc = new HtmlAgilityPack.HtmlDocument();

        string filePath = @"C:\webform4.aspx";

        htmlDoc.Load(filePath);

        foreach (HtmlNode div in htmlDoc.DocumentNode.SelectNodes("//div"))
        {
            Response.Write(div.Id);
            foreach (HtmlNode asp in div.SelectNodes("asp:Button"))
            {
                Response.Write(asp.Id);
            }
        }

내 aspx 페이지는 다음과 같습니다.

        HtmlAgilityPack.HtmlDocument htmlDoc = new HtmlAgilityPack.HtmlDocument();

        string filePath = @"C:\webform4.aspx";

        htmlDoc.Load(filePath);

        foreach (HtmlNode div in htmlDoc.DocumentNode.SelectNodes("//div"))
        {
            Response.Write(div.Id);
            foreach (HtmlNode asp in div.SelectNodes("asp:Button"))
            {
                Response.Write(asp.Id);
            }
        }

수락 된 답변

나는 Agility Pack과 함께 Linq를 XPath가 아닌 직접 사용한다. 어떻습니까?

HtmlAgilityPack.HtmlDocument htmlDoc = new HtmlAgilityPack.HtmlDocument();

string filePath = @"C:\webform4.aspx";

htmlDoc.Load( filePath );

var aspNodes = htmlDoc.DocumentNode.Descendants().Where( n => n.Name.StartsWith( "asp:" ) );

foreach ( var aspNode in aspNodes ) {
    Console.WriteLine( "Element: {0} Id: {1}", aspNode.Name, aspNode.Attributes["Id"].Value );
}



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