2010-12-21 8 views
4

나는 코드를 통해 의견을 추가하려고 최선을 다했지만 특정 부분에 달라 붙었다.누군가이 HtmlAgilityPack 코드를 설명 할 수 있습니까?

// create a new instance of the HtmlDocument Class called doc 
1: HtmlDocument doc = new HtmlDocument(); 

// the Load method is called here to load the variable result which is html 
// formatted into a string in a previous code snippet 
2: doc.Load(new StringReader(result)); 

// a new variable called root with datatype HtmlNode is created here. 
// Im not sure what doc.DocumentNode refers to? 
3: HtmlNode root = doc.DocumentNode; 
4: 

// a list is getting constructed here. I haven't had much experience 
// with constructing lists yet 
5: List<string> anchorTags = new List<string>(); 
6: 

// a foreach loop is used to loop through the html document to 
// extract html with 'a' attributes I think..  
7: foreach (HtmlNode link in root.SelectNodes("//a")) 
8: { 
// dont really know whats going on here 
9:  string att = link.OuterHtml; 
// dont really know whats going on here too 
10:  anchorTags.Add(att) 
11: } 

이 코드 샘플을 here에서 해제했습니다. Farooq Kaiser에 대한 크레딧

+0

나는 라이브러리를 사용한 적이 없으며 여기 어둠 속에서 찌르다가 있지만 doc.DocumentNode는 문서의 현재 노드라고 가정합니다. 문서를로드하면 문서가로드됩니다. 루트 노드. –

답변

5

HTML 민첩성 팩 용어에서 "// a"는 "문서에서"a '또는'A '라는 이름의 모든 태그를 찾습니다 "를 의미합니다. XPATH에 대한보다 일반적인 도움말을 보려면 XPATH 문서를 참조하십시오 (HTML 민첩성 팩과는 별도로). 따라서 문서가 다음과 같이 보이는 경우 :

<div> 
    <A href="xxx">anchor 1</a> 
    <table ...> 
    <a href="zzz">anchor 2</A> 
    </table> 
</div> 

두 개의 앵커 HTML 요소가 표시됩니다. OuterHtml은 노드 자체를 포함하여 노드의 HTML을 나타내며 InnerHtml은 노드의 HTML 콘텐츠 만 나타냅니다. 그래서, 여기에 두 outerHTML에는 다음과 같습니다 HAP 구현이 관리 또는 HTML 케이스 무감각이 걸리기 때문에 나는 'A'또는 'A'를 지정한

<A href="xxx">anchor 1</a> 

<a href="zzz">anchor 2</A> 

참고. 그리고 "// A"dos는 기본적으로 작동하지 않습니다. 소문자를 사용하여 태그를 지정해야합니다.

+0

InnerHTML의 예를 보여주기 위해 답변을 업데이트 할 수 있습니까? – super9

+0

InnerHtml은 OuterHtml과 같이 사용됩니다 (예 : string AttContent = link.InnerHtml; –

+0

innter.html은 무엇을 참조할까요? 이 경우 outerhtml이 abc super9

5

키는 SelectNodes 메서드입니다. 이 부분에서는 XPath를 사용하여 쿼리와 일치하는 HTML 노드 목록을 가져 왔습니다.

이것은 내 XPath를 배운 곳이다 : 일치와 outerHTML에 도착 이러한 노드를 통해 http://www.w3schools.com/xpath/default.asp

그럼 그냥 산책을 - 태그를 포함한 전체 HTML을 문자열 목록에 추가합니다. List는 기본적으로 배열이지만 더 유연합니다. 태그를 포함하지 않고 내용 만 원하면 HtmlNode.InnerHTML 또는 HtmlNode.InnerText를 사용하십시오.

+2

+1, XPath를 읽을 수없는 사람은'Elements()'/'Descendents()'를 사용하고 표준 LinqToXml'XElement' 구문을 사용하여 모든 것을 쿼리 할 수 ​​있습니다. –

+0

@Kirk Woll 나는 그것을 몰랐다. Linq를 사용하는 편이 낫습니다. 매번 XPath를 사용할 때마다 치트 시트를 다시 살펴 봐야합니다. – LoveMeSomeCode

관련 문제