2010-06-30 6 views
0

보통 형식의 HTML 문서가 있습니다. 그것은 XHTML이 아니므로 유효한 XML이 아닙니다. 시작 태그의 오프셋을 감안할 때,이 태그의 내용을 가져와야합니다. 내부에 여러 개의 중첩 태그가있을 수 있다는 점을 감안하면이 태그의 내용을 가져와야합니다.C에서 div 요소 내용 가져 오기

비표준 라이브러리를 사용하지 않는 최소 C# 코드로이 문제를 해결하는 가장 쉬운 방법은 무엇입니까?

+1

? 계층 구조를 아래로 내려갈 수있는 문자 수 또는 레벨 수는 무엇입니까? – EndangeredMassa

+0

오프셋은 문자 수입니다. 문서는 구문 분석되지 않으므로 태그 및 내부 내용에 대한 정보는 없습니다. – Ghostrider

+0

비표준 의미입니까 : 1. .NET 프레임 워크 자체에 포함되지 않은 것은 원하지 않습니다. 또는 2. 관리되지 않는 코드를 호출하는 라이브러리를 원하지 않습니다. – SamuelWarren

답변

1

당신은

public static string StripHTMLTag(string strHTML) 
{ 
     return Regex.Replace(strHTML, "<(.|\n)*?>", ""); 
} 

가 외부 태그의 콘텐츠를 전달할 다음과 같은 기능을 사용하여 HTML 콘텐츠를 제거 할 수 있습니다,이 모든 HTML 태그를 제거하고 당신에게 전용 콘텐츠를 제공 할 것입니다.

희망이

Imran

+0

참고 : 보안을 위해 정규식을 사용하지 마십시오. 나는 이것이 OP의 질문에 대한 답을 모르겠지만, OP가 질문을 명확하게 해줄 때까지는 이것이 적당 할 것 같다. –

0

하는 나는 다음과 같은 함수를 작성 결국 도움이됩니다. 제 목적을 위해 일을 끝내는 것 같습니다.

나는 그것이 더러웠다는 것을 알고 있지만 대부분의 웹 페이지의 HTML 코드도 마찬가지입니다. 사람이 주요 결함을 지적 할 수있는 경우

이렇게하십시오 : 당신은 무엇을 사용하는 오프셋

private static readonly Regex rxDivTag = new Regex(
     @"<(?<close>/)?div(\s[^>]*?)?(?<selfClose>/)?>", 
     RegexOptions.Compiled | RegexOptions.ExplicitCapture | RegexOptions.IgnoreCase | RegexOptions.Singleline); 
    private const string RXCAP_DIVTAG_CLOSE = "close"; 
    private const string RXCAP_DIVTAG_SELFCLOSE = "selfClose"; 

    private static List<string> GetProductDivs(string pageText, int start) 
    { 
     bool success = true; 
     int curr = start + 1; 
     for (Match matchNextTag = rxDivTag.Match(pageText, curr) ; depth > 0 ; matchNextTag = rxDivTag.Match(pageText, curr)) 
     { 
      if (matchNextTag == Match.Empty) 
      { 
       success = false; 
       break; 
      } 

      if (matchNextTag.Groups[RXCAP_DIVTAG_CLOSE].Success) 
      { 
       if (matchNextTag.Groups[RXCAP_DIVTAG_SELFCLOSE].Success) 
       { 
        success = false; 
        break; 
       } 

       --depth; 
      } 
      else if (!matchNextTag.Groups[RXCAP_DIVTAG_SELFCLOSE].Success) 
      { 
       ++depth; 
      } 

      curr = matchNextTag.Index + matchNextTag.Length; 
     } 

     if (success) 
     { 
      return pageText.Substring(start, curr - start); 
     } 
     else 
     { 
      return null; 
     } 
    }