Word'de oluşturulan çok büyük bir yardım belgesine sahibiz ve bu daha da büyük ve aykırı bir HTM belgesi oluşturmak için kullanıldı. C# ve bu kütüphaneyi kullanarak, yalnızca bu dosyanın bir bölümünü uygulamamın herhangi bir noktasında tutup görüntülemek istiyorum. Bölümler böyle bölünür:İki HTML etiketi arasında içerik bulma 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>
Mantıken konuşma, bir a
etiketinde bir bölüm adının bulunduğu bir H1
yoktur. Başka bir h1
ile karşılaşana ve bu div'u hariç tutmadan, dıştaki div'den her şeyi seçmek istiyorum.
- Her Bölüm Adı mantıksal bölüm
- Bu yorumlar gerçek belgede bulunmayan yorumlarla işaretlenmiştir çoklu çocuk (yaklaşık 6 her)
- olan bir
h1
altında<a>
etiketi bulunan
girişimim:
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 Bu konuyla ilgili belgeleri bulamadım, başlangıç düğümünden sonraki h1 öğesine nasıl ulaşabileceğimi bilmiyorum. Herhangi bir öneri takdir edilecektir.
Güzel. Filtreyi biraz değiştirmek zorunda kaldım çünkü dokümanda bölüm adları ile birden çok div vardı. HtmlNode startNode = helpDocument.DocumentNode.Descendants ("h1") kullanarak bitti.Name (d => d.InnerText.Contains (SectionName)) FirstOrDefault(); 've oradan ana düğüme kadar hareket. Geri kalanı mükemmel çalıştı. – Rondel
Mükemmel. Çalıştığıma çok sevindim. –