C #에서 모든 자식이있는 dl 태그를 선택하는 방법

c# html-agility-pack

문제

블로 HTML 테이블에서 모든 dtdd 를 선택하는 데 문제가 있습니다.

<dl class="Grid Grid--multicol Grid--2col:40em Grid--4col:60em">
    <div class="Grid-cell u-flex u-flexOne u-flexRow">
        <dt> Item ID:</dt>
        <dd class="u-weightSemibold u-paddingL5px">72547664</dd>
    </div>
    <div class="Grid-cell u-flex u-flexOne u-flexRow">
            <dt> License:</dt>
            <dd class="u-weightSemibold u-paddingL5px">
                <a class="u-linkDodgerBlue js-infoLicenseString" href="" target="_blank">Standard</a>
            </dd>
    </div>
    <div class="Grid-cell u-flex u-flexOne u-flexRow">
            <dt> Usage:</dt>
            <dd class="u-weightSemibold">Commercial<span class="TooltipQuestionMark"></span></dd>
    </div>
    <div class="Grid-cell u-flex u-flexOne u-flexRow">
            <dt> Required Plugins:</dt>
            <dd class="u-weightSemibold u-paddingL5px">None</dd>
    </div>
    <div class="Grid-cell u-flex u-flexOne u-flexRow">
            <dt> Creation Tool:</dt>
            <dd class="u-weightSemibold u-paddingL5px">Autodesk</dd>
    </div>
    <div class="Grid-cell u-flex u-flexOne u-isHidden:0-60em"></div>
</dl>

나는 이것을 쓴다.

            i = 0; doc.DocumentNode.SelectNodes("//dl").Where(x => x.HasClass("Grid")).FirstOrDefault().SelectNodes(".//div").ToList().ForEach(x =>
            {
                result.Items.Add(new DownloadItem { Name = "specs-title", Index = i,    Type = DownloadItemType.Text, Value = x.SelectNodes(".//dt").FirstOrDefault().GetText() });
                result.Items.Add(new DownloadItem { Name = "specs",       Index = i++,  Type = DownloadItemType.Text, Value = x.SelectNodes(".//dd").GetText() });
            });

위의 코드는 첫 번째 행을 가져옵니다. Item ID: | 72547664 모든 dtdd 정보를 나열하는 데 문제가 72547664

수락 된 답변

코드의 문제는 처음에 Grid 클래스로 모든 dl 요소를 가져 FirstOrDefault() 할 때 FirstOrDefault() 메서드를 사용하여 해당 유형의 DOM 요소 중 첫 번째 만 가져 FirstOrDefault() .

i = 0; doc.DocumentNode.SelectNodes("//dl").Where(x => x.HasClass("Grid")).SelectNodes(".//div").ToList().ForEach(x =>
            {
                result.Items.Add(new DownloadItem { Name = "specs-title", Index = i,    Type = DownloadItemType.Text, Value = x.SelectNodes(".//dt").FirstOrDefault().GetText() });
                result.Items.Add(new DownloadItem { Name = "specs",       Index = i++,  Type = DownloadItemType.Text, Value = x.SelectNodes(".//dd").GetText() });
            });

당신은 FirstOrDefault() 를 제거하여 요구에 맞는 모든 요소를 FirstOrDefault() 합니다.



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