Análisis de etiquetas principales y descendientes utilizando HTML Agility Pack

asp.net html html-agility-pack

Pregunta

Estoy tratando de analizar el formulario HTML con HTML Agility Pack. Está funcionando bien para el siguiente código: <p>Some Text</p> Pero supongamos que tengo esto: <p>Some Text in p Tag<span>Some text in span tag.</span> Again some text in p tag</p>

Estoy usando HtmlNode nodeItem in htmlDoc.DocumentNode.Descendants(controlName).ToArray() para obtener todos los valores de un control (en nuestro caso p y span). Pero esto es solo obtener texto que está en span.

¿Cómo puedo obtener los valores de tage - "p" así como "span"?

ACTUALIZACIÓN: Estoy tratando de desarrollar una aplicación multilingüe donde los archivos de recursos y las claves se generan a través del código. En el ejemplo anterior: necesito crear 3 claves: 1- "Algún texto en la etiqueta p", 2- "Algún texto en la etiqueta de intervalo". y 3- "De nuevo un poco de texto en la etiqueta p". ¿Cómo puedo crear estas claves. El escenario actual es que está creando una clave para la etiqueta span y no para la etiqueta p.

Gracias por adelantado

Respuesta popular

En realidad la pregunta no es muy clara. Debería haber publicado códigos más relevantes que muestran cómo intentó obtener el valor de <p> y <span> .

Este funcionó bien para obtener texto tanto en <p> como en <span> :

var html = @"<p>Some Text in p Tag<span>Some text in span tag.</span> Again some text in p tag</p>";
var htmlDoc = new HtmlDocument();
htmlDoc.LoadHtml(html);
foreach (HtmlNode nodeItem in htmlDoc.DocumentNode.Descendants("p").ToArray())
{
    Console.WriteLine(nodeItem.InnerText);
}
foreach (HtmlNode nodeItem in htmlDoc.DocumentNode.Descendants("span").ToArray())
{
    Console.WriteLine(nodeItem.InnerText);
}

La misma salida producida por este único bucle foreach :

foreach (HtmlNode nodeItem in 
                htmlDoc.DocumentNode
                       .SelectNodes("//*[name() = 'p' or name() = 'span']"))
{
    Console.WriteLine(nodeItem.InnerText);
}

O si realmente no te importa el nombre de la etiqueta, puedes obtener todos los elementos de la siguiente manera:

foreach (HtmlNode nodeItem in 
                htmlDoc.DocumentNode
                       .SelectNodes("//*"))
{
    Console.WriteLine(nodeItem.InnerText);
}

Si ninguna de las muestras anteriores es útil para su caso, actualice la pregunta para aclarar más sobre el problema real que está tratando de resolver.



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é