2012-02-16 3 views
1

웹 사이트에서 데이터를 가져 오려고합니다. 나는 HtmlAgilityPack (C#)을 사용하고있다. 웹 사이트의 내용이 여기에이HtmlAgilityPack, Xpath에서 술어 사용

<div id="list"> 
    <div class="list1"> 
    <a href="example1.com" class="href1" >A1</a> 
    <a href="example4.com" class="href2" /> 
    </div> 
    <div class="list2"> 
    <a href="example2.com" class="href1" >A2</a> 
    <a href="example5.com" class="href2" /> 
    </div> 
    <div class="list3"> 
    <a href="example3.com" class="href1" >A3</a> 
    <a href="example6.com" class="href2" /> 
    </div> 
    <div class="list3"> 
    <a href="example4.com" class="href1" >A4</a> 
    <a href="example6.com" class="href2" /> 
    </div> 
    <div class="list3"> 
    <a href="example5.com" class="href1" >A5</a> 
    <a href="example6.com" class="href2" /> 
    </div><div class="list3"> 
    <a href="example6.com" class="href1" >A6</a> 
    <a href="example6.com" class="href2" /> 
    </div><div class="list3"> 
    <a href="example3.com" class="href1" >A7</a> 
    <a href="example6.com" class="href2" /> 
    </div> 
</div> 

처럼, 우리는 클래스 = "href1"7 개 연결되는 링크를 제공하고 있습니다. 3 링크 (3 링크에서 5 링크까지) 만 가져 오려고합니다. 이러한 특정 링크를 가져 오는 방법은 무엇입니까?

답변

1

데이터가 이미 올바른 형식의 XML 인 것으로 보입니다. XHTML 페이지를 파싱하는 경우 .NET Framework의 System.Xml 클래스로 벗어날 수 있습니다. 예를 들어, XElement로 데이터를로드하는 데, 당신은 사용할 수 있습니다

XElement xElement = XElement.Parse(@" 
    <div id=""list""> 
     <div class=""list1""> 
      <a href=""example1.com"" class=""href1"" >A1</a> 
      <a href=""example4.com"" class=""href2"" /> 
     </div> 
     <div class=""list2""> 
      <a href=""example2.com"" class=""href1"" >A2</a> 
      <a href=""example5.com"" class=""href2"" /> 
     </div> 
     <div class=""list3""> 
      <a href=""example3.com"" class=""href1"" >A3</a> 
      <a href=""example6.com"" class=""href2"" /> 
     </div> 
     <div class=""list3""> 
      <a href=""example4.com"" class=""href1"" >A4</a> 
      <a href=""example6.com"" class=""href2"" /> 
     </div> 
     <div class=""list3""> 
      <a href=""example5.com"" class=""href1"" >A5</a> 
      <a href=""example6.com"" class=""href2"" /> 
     </div> 
     <div class=""list3""> 
      <a href=""example6.com"" class=""href1"" >A6</a> 
      <a href=""example6.com"" class=""href2"" /> 
     </div> 
     <div class=""list3""> 
      <a href=""example3.com"" class=""href1"" >A7</a> 
      <a href=""example6.com"" class=""href2"" /> 
     </div> 
    </div>"); 

을 그리고, 그 class 속성 href1의 값이 다섯 번째 <a> 요소, 사용 세 번째를 선택 :

var links = xElement.XPathSelectElements("//a[@class='href1']").Skip(2).Take(3).ToList(); 

반면에, 당신은 HtmlAgilityPack.HtmlDocument 인스턴스가있는 경우에, 당신은 사용하여 XPath 쿼리를 실행할 수 있습니다 :

HtmlNodeCollection links = htmlDoc.DocumentNode.SelectNodes("//a[@class='href1']"); 
var links3to5 = links.Cast<HtmlNode>().Skip(2).Take(3).ToList(); 
2
코드의

이런 종류 :

HtmlDocument doc = new HtmlDocument(); 
    doc.Load(myHtmlFile); 
    foreach (HtmlNode node in doc.DocumentNode.SelectNodes(
     "//div[@class='list3' and position() > 2 and position() < 6]/a[@class='href1']")) 
    { 
     Console.WriteLine("node:" + node.InnerText); 
    } 

당신이 결과를 줄 것이다 :

node:A3 
node:A4 
node:A5 
+0

당신에게 대단히 감사합니다 .. –