C #을 사용한 HTML 구문 분석

c# html html-agility-pack replace string

문제

asp.net 웹 사이트에서 일하고 있습니다. 나는 C #을 사용하여 HTML에서 특정 문자열을 대체해야합니다. 다음은 html입니다. 여기에 "@ 이름"을 C # 코드를 사용하여 유효한 이름으로 바꿔야합니다. 내가 자바 script.It을 사용하여 노력하고있어. 내가 C #을 사용하여 이것을 달성 할 수 있습니까?

어떻게하면 현재 페이지의 HTML을 C # 또는 HtmlAgilityPack을 사용하여 파싱 할 수 있습니까?

HTML :

<div>
In the @name, you may have configured an iPad in both the AppleDevices and the TabletDevices configuration. However, because AppleDevices may have been set for a small display size, you want an iPad to use the TableDevices configuration (which has a larger screen). Reorder the devices in the following order so that an iPad will use the TableDevices configuration first.
Tablet Devices
Apple Devices
</div>

수락 된 답변

MVC라고 가정하면 CsQuery 프로젝트를 살펴 보겠습니다. CsQuery는 jQuery 포트 및 CSS 선택기 엔진으로 HTML을 직접 사용하는 데 사용할 수 있습니다. 그러나 더 중요한 것은이 프로젝트에는 MVC에서 C #으로 렌더링되기 전에 페이지의 HTML에 액세스하는 코드 예제가 포함되어 있다는 것입니다.

부분보기에 액세스하는 것은 매우 쉽습니다. 주제에 대한 Rick Strahl의 블로그 게시물 을 참조하십시오.

그러나 페이지의 전체 HTML에 액세스하여 렌더링되기 전에 변경하려는 경우 사용자 정의 ViewEngine 을 만들고 HTML에 액세스 할 수있는 컨트롤러에 대한 콜백을 만들어야합니다. 이 권리를 행사하는 데는 상당히 관련이 있습니다. 수백 줄의 코드를 복사하는 대신 CsQuery에 포함 된 예제 MVC 앱, 특히 CsQueryView 폴더의 클래스를 CsQueryView .

https://github.com/jamietre/CsQuery/tree/master/examples/CsQuery.MvcApp

여기에는 다음과 같이 컨트롤러에 메소드를 추가 할 수있는 사용자 정의 뷰 엔진과 사용자 정의 컨트롤러 기본 클래스가 포함됩니다.

// runs for all actions
public void Cq_Start()
{
    Doc["a.not-allowed"]
        .Attr("onclick","javascript:alert('You're not authorized to click this')");
}

// runs for the Index action
public void Cq_Index()
    Doc["div"].Css("border", "1px solid red;");
}

이 메소드는 Doc 의 값을 설정하고 설정하는 일반적인 조치 메소드 다음 에 호출됩니다. DocCQ 개체 (CsQuery의 핵심 개체)입니다. 여기에는 페이지의 모든 HTML이 포함됩니다. jQuery 객체와 같습니다. 귀하의 상황에서 그냥 같은 jQuery 메서드를 사용할 수 있습니다.

// runs for all actions
public void Cq_Start()
{
    Doc["a.not-allowed"]
        .Attr("onclick","javascript:alert('You're not authorized to click this')");
}

// runs for the Index action
public void Cq_Index()
    Doc["div"].Css("border", "1px solid red;");
}

이 뷰 엔진을 사용하도록 MVC 응용 프로그램을 전환하려면이 코드를 Application_Start 에 추가해야합니다.

// runs for all actions
public void Cq_Start()
{
    Doc["a.not-allowed"]
        .Attr("onclick","javascript:alert('You're not authorized to click this')");
}

// runs for the Index action
public void Cq_Index()
    Doc["div"].Css("border", "1px solid red;");
}

그러나 CsQuery를 사용하지 않으려는 경우 예제에서는 렌더링하기 전에 MVC에서 HTML 출력에 액세스하는 방법을 보여야합니다. 리플렉션을 사용하여 컨트롤러에서 콜백하는 메서드를 찾아 내고 CsQuery 객체 대신 HTML 문자열을 제공하도록 쉽게 조정할 수 있습니다.


인기 답변

가장 간단한 방법은 String.Replace(String, String) 메서드를 사용 String.Replace(String, String) 것입니다.

string newString = html.Replace("@name", "valid name");



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