HtmlAgilityPack 여러 요소

c# html-agility-pack regex

문제

여러 div가 들어있는 html 문서가 있습니다.

예:

<div class="element">
    <div class="title">
        <a href="127.0.0.1" title="Test>Test</a>
    </div>
</div>

이제이 코드를 사용하여 title 요소를 추출합니다.

List<string> items = new List<string>();
var nodes = Web.DocumentNode.SelectNodes("//*[@title]");
if (nodes != null)
{
   foreach (var node in nodes)
   {
       foreach (var attribute in node.Attributes)
           if (attribute.Name == "title")
               items.Add(attribute.Value);
   }
}

나는 href와 title 엘리먼트를 동시에 추출하기 위해 코드를 수정하는 법을 모른다.

각 div는 속성으로 포함 된 태그가있는 객체 여야합니다.

public class CheckBoxListItem
{
    public string Text { get; set; }
    public string Href { get; set; }
}

수락 된 답변

다음 xpath 쿼리를 사용하여 제목과 href가있는 태그 만 검색 할 수 있습니다.

//a[@title and @href]

다음과 같이 코드를 사용할 수 있습니다.

List<CheckBoxListItem> items = new List<CheckBoxListItem>();
var nodes = Web.DocumentNode.SelectNodes("//a[@title and @href]");
if (nodes != null)
{
   foreach (var node in nodes)
   {
      items.Add(new CheckBoxListItem()
      {
        Text = node.Attributes["title"].Value,
        Href = node.Attributes["href"].Value
      });
   }
}

인기 답변

CSS 선택을 위해 HtmlAgilityPack과 함께 ScrapySharp의 패키지를 사용합니다.

(CssSelect 메서드를 사용할 수 있도록 ScrapySharp.Extensions에 using 문을 추가하십시오.)

using HtmlAgilityPack;
using ScrapySharp.Extensions;

귀하의 경우, 나는 다음과 같이 할 것입니다 :

HtmlWeb w = new HtmlWeb();

var htmlDoc = w.Load("myUrl");
var titles = htmlDoc.DocumentNode.CssSelect(".title");
foreach (var title in titles)
{
    string href = string.Empty;
    var anchor = title.CssSelect("a").FirstOrDefault();

    if (anchor != null)
    {
        href = anchor.GetAttributeValue("href");
    }
}


아래 라이선스: CC-BY-SA with attribution
와 제휴하지 않음 Stack Overflow
이 KB는 합법적입니까? 예, 이유를 알아보십시오.
아래 라이선스: CC-BY-SA with attribution
와 제휴하지 않음 Stack Overflow
이 KB는 합법적입니까? 예, 이유를 알아보십시오.