2012-11-27 2 views
0

그래서 다음 데이터를 CSV로 구문 분석하려고합니다. 필자의 글을 읽으면서 HAP을 사용하는 가장 좋은 방법은 강력한 파서 (parser)가 있기 때문에 들리는 것 같다.HTML 스크랩 표를 CSV (HAP? 사용)

dynamic doc = this.wbControl.Document; 

내용

 <div class="content"> 
       <fieldset> 
        <ul class="fieldsetr"> 
         <li class="row medium"> 
          <div class="field"> 
           <div class="shell"> 
            <em class="disable">Sender:</em> 
           </div> 
          </div> 
          <div> 
           <div class="clip"> 
            <em>[email protected]</em> 
           </div> 
          </div> 
         </li> 
         <li class="row medium alt"> 
          <div class="field"> 
           <div class="shell"> 
            <em class="disable">Recipient:</em> 
           </div> 
          </div> 
          <div> 
           <div class="clip"> 
            <em>[email protected]</em> 
           </div> 
          </div> 
         </li> 
         <li class="row medium"> 
          <div class="field"> 
           <div class="shell"> 
            <em class="disable">Message ID:</em> 
           </div> 
          </div> 
          <div> 
           <div class="clip"> 
            <em>2342342345235</em> 
           </div> 
          </div> 
         </li> 
         <li class="row medium alt"> 
          <div class="field"> 
           <div class="shell"> 
            <em class="disable">Message size:</em> 
           </div> 
          </div> 
          <div> 
           <div class="clip"> 
            <em>18.74 KB 
            </em> 
           </div> 
          </div> 
         </li> 
         <li class="row medium"> 
          <div class="field"> 
           <div class="shell"> 
            <em class="disable">Date and time received:</em> 
           </div> 
          </div> 
          <div> 
           <div class="clip"> 
            <em>11/27/2012 6:17:22 AM</em> 
           </div> 
          </div> 
         </li> 
         <li class="row medium alt"> 
          <div class="field"> 
           <div class="shell"> 
            <em class="disable">Date and time filtered:</em> 
           </div> 
          </div> 
          <div> 
           <div class="clip"> 
            <em>11/27/2012 6:17:22 AM</em> 
           </div> 
          </div> 
         </li> 
         <li class="row medium"> 
          <!-- Connector Details --> 

         </li>        
         <li class="row medium alt"> 
          <div class="field"> 
           <div class="shell"> 
            <em class="disable">First delivery attempt:</em> 
           </div> 
          </div> 
          <div> 
           <div class="clip"> 
            <em>11/27/2012 6:17:23 AM</em> 
           </div> 
          </div> 
         </li> 
         <li class="row medium"> 
          <div class="field"> 
           <div class="shell"> 
            <em class="disable">Final delivery attempt:</em> 
           </div> 
          </div> 
          <div> 
           <div class="clip"> 
            <em>11/27/2012 6:17:23 AM</em> 
           </div> 
          </div> 
         </li> 
         <li class="row medium alt"> 
          <div class="field"> 
           <div class="shell"> 
            <em class="disable">From IP address:</em> 
           </div> 
          </div> 
          <div> 
           <div class="clip"> 
            <em>1.2.3.4 &lt;unknown&gt;</em> 
           </div> 
          </div> 
         </li> 
         <li class="row medium"> 
          <div class="field"> 
           <div class="shell"> 
            <em class="disable">To IP address:</em> 
           </div> 
          </div> 
          <div> 
           <div class="clip"> 
            <em>4.3.2.1 &lt;mail.example2.com&gt; </em> 
           </div> 
          </div> 
         </li> 
         <li class="row medium alt"> 
          <div class="field"> 
           <div class="shell"> 
            <em class="disable">Filtering results:</em> 
           </div> 
          </div> 
          <div> 
           <div class="clip"> 
            <em>Passed Filtering</em> 
           </div> 
          </div> 
         </li> 
         <li class="row medium"> 
          <div class="field"> 
           <div class="shell"> 
            <em class="disable">Delivery result:</em> 
           </div> 
          </div> 
          <div> 
           <div class="clip"> 
            <span><em>Delivered: 470 2.4.0 &lt;2342342345235&gt; [InternalId=2321233] Queued mail for delivery</em></span> 
           </div> 
          </div> 
         </li> 
        </ul> 
       </fieldset> 
     </div> 

날이 데이터를 변환하는 최선의 방법은 무엇입니까 : 지금 현재로

의 WPF WebBrowser 컨트롤 콘텐츠를 액세스하고 있습니까? 이것은 하나의 레코드 일뿐 더 많은 레코드가 추가됩니다.

편집을 테스트하려면 다음 코드를 사용하여 종료

: 사람이 더 효율적인 솔루션이있는 경우

  HtmlAgilityPack.HtmlDocument docHAP = new HtmlAgilityPack.HtmlDocument(); 
      docHAP.LoadHtml(doc.Body.InnerHtml.ToString()); 

      foreach(HtmlNode emNode in docHAP.DocumentNode.SelectNodes("//em")) 
      { 
       MessageBox.Show(emNode.InnerText.ToString()); 
      } 

알려 주시기 바랍니다.

답변

1

예, HTML Agilty Pack을 사용하십시오. 이는 .NET 용 오픈 소스 HTML 파서입니다.

정확하게 Html Agility Pack (HAP)이란 무엇입니까?

이것은 읽기/쓰기 DOM을 작성하고 일반 XPATH 또는 XSLT를 지원하는 민첩한 HTML 파서입니다 (실제로 XPATH 나 XSLT를 사용하지 않아도되므로 걱정하지 않아도됩니다 ...). "웹 외부"HTML 파일을 구문 분석 할 수있는 .NET 코드 라이브러리입니다. 파서는 "실제"형식이 잘못된 HTML에 매우 관대합니다. 개체 모델은 System.Xml을 제안하는 것과 매우 유사하지만 HTML 문서 (또는 스트림)를 대상으로합니다.

HTML을 쿼리하고 원하는 데이터를 추출 할 때 사용할 수 있습니다.

단순히 XPath을 사용하면 특정 element/attribute/text 데이터를 얻을 수 있습니다.

HtmlAgilityPack.HtmlDocument doc = new HtmlAgilityPack.HtmlDocument(); 
doc.LoadHtml(this.wbControl.Document); 

// get all the 'em' tags from HTML 
foreach(HtmlNode emNode in doc.DocumentElement.SelectNodes("//em") 
{  
    if (emNode.Attributes["class"] != null) 
     var value = emNode.Attributes["class"].Value; 
} 

// get all the `em` tags where 'class' attribute value is 'disable' from HTML 
foreach(HtmlNode emNode in doc.DocumentElement 
           .SelectNodes("//em[@class='disabled']") 
{  
    // ... 
} 
+0

XPATH와 XSLT로 머리에 못을 박았습니다. 그 부분은 항상 나를 잡아. 위의 단 하나의 섹션조차도 예제를 제공 할 수 있습니까? – lordzero

+0

내 수정 된 답변보기 희망이 도움이! –

+0

확실히 올바른 방향으로 나를 가리키고 있습니다. this.wbControl.Document는 mshtml 문서이므로 LoadHtml 메서드는 작동하지 않습니다. 테스트를 위해 HAPP HtmlDocument atm으로 변환하는 방법을 찾으려고합니다. 즉, DocumentElement에 오류가 발생했지만 대신 DocumentNode를 사용하는 것처럼 보입니다. – lordzero

관련 문제