Tenemos un documento de ayuda absolutamente masivo creado en Word y esto se usó para generar un documento HTM aún más masivo y poco pesado. Usando C# y esta biblioteca, solo quiero tomar y mostrar una sección de este archivo en cualquier punto de mi aplicación. Las secciones se dividen así:Obtener contenido entre dos etiquetas HTML usando Html Agility Pack
<!--logical section starts here -->
<div>
<h1><span style='mso-spacerun:yes'></span><a name="_Toc325456104">Section A</a></h1>
</div>
<div> Lots of unnecessary markup for simple formatting... </div>
.....
<!--logical section ends here -->
<div>
<h1><span style='mso-spacerun:yes'></span><a name="_Toc325456104">Section B</a></h1>
</div>
Lógicamente hablando, no es una H1
con un nombre de sección en una etiqueta a
. Quiero seleccionar todo desde el div que contiene el exterior hasta que encuentre otro h1
y excluya ese div.
- Cada Nombre de la sección se encuentra en una etiqueta
<a>
bajo unh1
que tiene varios hijos (alrededor de 6 cada uno) - La sección lógica está marcado con comentarios
- Estos comentarios no existen en el documento actual
Mi intento:
var startNode = helpDocument.DocumentNode.SelectSingleNode("//h1/a[contains(., '"+sectionName+"')]");
//go up one level from the a node to the h1 element
startNode=startNode.ParentNode;
//get the start index as the index of the div containing the h1 element
int startNodeIndex = startNode.ParentNode.ChildNodes.IndexOf(startNode);
//here I am not sure how to get the endNode location.
var endNode =?;
int endNodeIndex = endNode.ParentNode.ChildNodes.IndexOf(endNode);
//select everything from the start index to the end index
var nodes = startNode.ParentNode.ChildNodes.Where((n, index) => index >= startNodeIndex && index <= endNodeIndex).Select(n => n);
Sine No he podido encontrar documentación sobre esto, no sé cómo puedo pasar de mi nodo de inicio al siguiente elemento h1. Cualquier sugerencia sera apreciada.
Agradable. Tuve que modificar ligeramente el filtro porque tenía varios divs con los nombres de las secciones en el documento. Terminé usando 'HtmlNode startNode = helpDocument.DocumentNode.Descendants (" h1 "). Where (d => d.InnerText.Contains (SectionName)). FirstOrDefault();' y moviéndome hacia el nodo primario desde allí. El resto funcionó perfectamente. Gracias – Rondel
Excelente. Estoy tan contento de que funcionó. –