Cómo seleccionar una etiqueta dl con todos los hijos en c #

c# html-agility-pack

Pregunta

Tengo un problema para seleccionar todos los dt y dd de la tabla HTML de golpe

<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>

Escribo esto

            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() });
            });

El código anterior solo toma la primera fila. Item ID: | 72547664 ¿ 72547664 es mi problema para enumerar toda la información de dt y dd

Respuesta aceptada

El problema de su código es que la primera vez que desea capturar todos los elementos dl con la clase Grid , solo toma el primero de ese tipo de elementos DOM con el método 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() });
            });

debe eliminar FirstOrDefault() para tomar todos los elementos que se adapten a su demanda.



Licencia bajo: CC-BY-SA with attribution
No afiliado con Stack Overflow
¿Es esto KB legal? Sí, aprende por qué
Licencia bajo: CC-BY-SA with attribution
No afiliado con Stack Overflow
¿Es esto KB legal? Sí, aprende por qué