Wordで作成された非常に大規模なヘルプドキュメントがあり、これを使用して、さらに大規模で扱いにくいHTMドキュメントを生成しました。C#とこのライブラリを使用して、アプリケーションの任意の時点でこのファイルの1つのセクションのみを取得して表示したいと思います。セクションは次のように分割されます。
<!--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>
論理的に言えば、タグH1
にはセクション名が含まれています。a
別のdivに遭遇するまで、divを含む外側からすべてを選択し、h1
そのdivを除外したいと思います。
- 各セクション名は、複数の子(それぞれ約6つ)を持つ
<a>
タグの下にあります。h1
- 論理セクションはコメントでマークされています
- これらのコメントは実際のドキュメントには存在しません
私の試み:
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);
サイン私はこれに関するドキュメントを見つけることができませんでした、私は私のスタートノードから次のh1要素にどのように行くことができるかわかりません。任意の提案をいただければ幸いです。