2012-07-12 2 views
1

asp.net 웹 사이트에서 작업하고 있습니다. HTML에서 C#을 사용하여 특정 문자열을 바꿔야합니다. 다음은 html입니다. 여기에 "@name"을 C# 코드를 사용하여 유효한 이름으로 바꿔야합니다. 자바 스크립트를 사용해 보았습니다. 작동 중입니다. 어떻게 C#을 사용하여이 작업을 수행 할 수 있습니까?C#을 사용하여 HTML 구문 분석

구문 분석을 위해 현재 페이지의 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> 
+0

"현재 페이지의 HTML을 가져올 수 있습니다."WebForms, MVC, NancyFX를 사용하고 있다면 우리에게 말하지 않았습니다 ... –

답변

1

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

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

페이지의 전체 HTML에 액세스하고 렌더링하기 전에 변경하려는 경우 사용자 정의 ViewEngine을 만들고 HTML에 액세스 할 수있는 컨트롤러에 콜백해야합니다. 이 권리를 행사하는 데는 상당히 관련이 있습니다. 수백 줄의 코드를 복사 오히려보다는 CsQueryView 폴더에 특정 클래스, MVC 응용 프로그램이 CsQuery에 포함 된 예를 살펴 :

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를 방법을 사용할 수 있습니다하지 않으려면

ViewEngines.Engines.Clear(); 
ViewEngines.Engines.Add(new CsQueryViewEngine()); 

:

// select all divs on the page 
var div = Doc["div"]; 

// do parameter substitution 
var newText = div.Text().Replace("@name", valid_name); 

// update the text 
div.Text(newText); 

Application_Start에이 코드를 추가해야이보기 엔진을 사용하도록 MVC 응용 프로그램을 전환하려면 그러나 CsQuery를 사용하면 렌더링 전에 MVC에서 HTML 출력에 액세스하는 방법을 보여줘야합니다. 리플렉션을 사용하여 컨트롤러에서 콜백하는 메서드를 찾아 내고 CsQuery 객체 대신 HTML 문자열을 제공하도록 쉽게 조정할 수 있습니다.

+0

나는 당신과 연락하는 방법을 모르겠다. 나는이 장소가 당신에게 연락하는 가장 좋은 방법이라고 생각한다. Jsoup를 사용하여 Java로 프로젝트를 만들었습니다.이 프로젝트는 HTML을 파싱하고 DOM 트리를 만들고, 두 URL의 템플릿을 비교하는 것처럼 다양한 작업에 사용되었습니다. 그러나 문제는 Jsoup가 주어진 HTML (URL)의 동적 인 내용을 얻지 못한다는 것입니다. 그렇다면 Jsoup/CSquery를 사용하여 어떻게 할 수 있습니까? 나는 git에서 프로젝트를 봤다. 그러나 튜토리얼/예제가 없습니다. 그러니 내 문제를 해결하도록 도와주세요. 내 질문은 http://stackoverflow.com/questions/15805976/how-to-get-dynamic-contents-in-dom-tree-using-jsoup-in-java – devsda

+0

http://stackoverflow.com/questions입니다./15718235/optimization-algorithm-to-two-urls – devsda

+0

CsQuery는 .NET 라이브러리이고 Jsoup는 Java 라이브러리입니다. 어떤 환경을 사용하고 있습니까? 또한 문서가 약간 약하다고 사과하지만, CsQuery git 저장소의 examples 폴더 아래에 두 개의 예제 프로젝트가 있으며 설명서에는 HTML을로드하는 기본 사항이 포함되어 있습니다. 대부분의 기능은 jQuery 메서드 사용에 대한 자세한 내용이 필요하면 jQuery 설명서를 참조하십시오. 또한 Stack Overflow에서'csquery' 태그를 검색하는 경우 많은 일반적인 사용에 대한 구체적인 예가있는 많은 Q & A가 있습니다. –

3
var result = html.Replace("@name", valid_name) 
+0

어떻게 현재 페이지의 HTML을 HtmlAgilitypack의 HtmlDocument에로드 할 수 있습니까? – Bisileesh

+0

http://stackoverflow.com/q/5599012/1475234 -이 링크와 비슷한 질문이 있습니다. 그러나 현재 페이지 HTML을 가져올 수 없습니다. – Bisileesh

3

가장 간단한 방법은 String.Replace(String, String) 방법을 사용하는 것입니다, 당신은 string.replace()를 함께 갈 수있는 경우

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

현재 페이지의 HTML을 HtmlAgilitypack의 HtmlDocument에로드하려면 어떻게해야합니까? – Bisileesh

+0

@NewBornDeveloper - 웹에서로드하려면'HtmlWeb'을 사용하고 URL을 사용하거나 로컬 경로에서로드 할'HtmlDocument'를 사용하십시오. – Oded

+0

var hw = new HtmlWeb()을 사용 해봤습니다. HtmlDocument doc = hw.Load (Request.Url.ToString()); 그러나 운이 없다! – Bisileesh

0

그냥이 대체;

코드가 html 파일처럼 보입니다. 변수 목록이 커지면 Razor를 템플릿 엔진 인 으로 사용하는 것이 좋습니다. 여기서 정적 형식, intellisense, HTML 표 및 기타 기능을 사용할 수 있습니다.

1
string [email protected]"<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>"; 
string htmlNewContent=htmlContent.Replace("@name",valid_name);