Chúng tôi có một tài liệu trợ giúp cực lớn được tạo trong Word và được sử dụng để tạo ra một tài liệu HTM thậm chí lớn hơn và không đáng sợ. Sử dụng C# và thư viện này, tôi chỉ muốn lấy và hiển thị một phần của tệp này tại bất kỳ thời điểm nào trong ứng dụng của tôi. Phần được chia ra như thế này:Lấy nội dung giữa hai thẻ HTML bằng cách sử dụng 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>
nói cách logic, có một H1
với một tên phần trong một thẻ a
. Tôi muốn chọn tất cả mọi thứ từ bên ngoài chứa div cho đến khi tôi gặp phải h1
và loại trừ div đó.
- Mỗi Section Name nằm trong một thẻ
<a>
dưới mộth1
trong đó có nhiều trẻ em (khoảng 6 mỗi) - Phần logic được đánh dấu với ý kiến
- Những bình luận không tồn tại trong các tài liệu thực tế
nỗ lực của tôi:
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 Tôi không thể tìm thấy tài liệu về điều này, tôi không biết làm thế nào tôi có thể nhận được từ nút bắt đầu của tôi đến phần tử h1 tiếp theo. Mọi lơi đê nghị đêu nên được đanh gia cao.
Rất đẹp. Tôi đã phải thay đổi bộ lọc một chút vì tôi có nhiều div với các tên phần trong tài liệu. Tôi đã kết thúc bằng cách sử dụng 'HtmlNode startNode = helpDocument.DocumentNode.Descendants (" h1 "). Ở đâu (d => d.InnerText.Contains (SectionName)). FirstOrDefault();' và di chuyển đến nút cha từ đó. Phần còn lại của nó hoạt động hoàn hảo.Thanks – Rondel
Tuyệt vời. Tôi rất vui vì đã làm việc. –