Paquete de agilidad HTML - Agarra el texto después de un nodo

c# html html-agility-pack

Pregunta

Tengo algo de HTML que estoy analizando usando C #

El texto de muestra está debajo, aunque esto se repite unas 150 veces con diferentes registros.

<strong>Title</strong>: Mr<br>
<strong>First name</strong>: Fake<br>
<strong>Surname</strong>: Guy<br>

Estoy tratando de obtener el texto en una matriz que será como

customerArray [0,0] = Title
customerArray [0,1] = Mr
customerArray [1,0] = First Name
customerArray [1,1] = Fake
customerArray [2,0] = Surname
customerArray [2,1] = Guy

Puedo obtener el texto en la matriz, pero simplemente tengo problemas para obtener el texto después de la pestaña de cierre FUERTE hasta que la etiqueta BR encuentre la siguiente etiqueta FUERTE

Cualquier ayuda sería apreciada

Respuesta aceptada

Puede usar XPath following-sibling::text()[1] para obtener el nodo de texto ubicado directamente después de cada strong . Aquí hay un ejemplo mínimo pero completo:

var raw = @"<div>
<strong>Title</strong>: Mr<br>
<strong>First name</strong>: Fake<br>
<strong>Surname</strong>: Guy<br>
        </div>";
var doc = new HtmlDocument();
doc.LoadHtml(raw);
foreach(HtmlNode node in doc.DocumentNode.SelectNodes("//strong"))
{
    var val = node.SelectSingleNode("following-sibling::text()[1]");
    Console.WriteLine(node.InnerText + ", " + val.InnerText);
}

dotnetfiddle demo

salida:

Title, : Mr
First name, : Fake
Surname, : Guy

Debería poder eliminar el ":" realizando una manipulación de cadena simple, si es necesario ...


Respuesta popular

<strong> es una etiqueta común, por lo que es algo específico para el formato de muestra que proporcionó.

var html = @"
<div>
<strong>First name</strong><em>italic</em>: Fake<br>
<strong>Bold</strong> <a href='#'>hyperlink</a><br>.
<strong>bold</strong>
<strong>bold</strong> <br>
text
</div>

<div>
<strong>Title</strong>: Mr<BR>
<strong>First name</strong>: Fake<br>
<strong>Surname</strong>: Guy<br>
</div>";

var document = new HtmlDocument();
document.LoadHtml(html);
// 1. <strong>
var strong = document.DocumentNode.SelectNodes("//strong");
if (strong != null)
{
    foreach (var node in strong.Where(
        // 2. followed by non-empty text node
        x => x.NextSibling is HtmlTextNode
        && !string.IsNullOrEmpty(x.NextSibling.InnerText.Trim())
        // 3. followed by <br>
        && x.NextSibling.NextSibling is HtmlNode
        && x.NextSibling.NextSibling.Name.ToLower() == "br"))
    {
        Console.WriteLine("{0} {1}", node.InnerText, node.NextSibling.InnerText);
    }
}


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é