Wordで作成された大量のヘルプ文書があり、これはさらに大量の未熟なHTM文書を生成するために使用されました。 C#とこのライブラリを使用して、アプリケーションの任意のポイントでこのファイルの1つのセクションだけを取得して表示します。セクションは、次のように分割されていますHtml Agility Packを使用して2つのHTMLタグ間でコンテンツを取得する
<!--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>
論理的に話すが、a
タグ内のセクション名を持つH1
があります。私は別のh1
に出会うまで、divを含む外側からすべてを選択し、そのdivを除外したいと思います。各セクション名が複数の子を持つh1
下<a>
タグに位置しています
- (約6各)
- 論理セクションは、これらのコメントは、実際の文書には存在しないコメント
- でマークされ
私の試み:
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私はこれに関するドキュメントを見つけることができませんでしたが、私はどのように私のスタートノードから次のh1要素に到達できるのか分かりません。任意の提案をいただければ幸いです。
ニース。ドキュメントのセクション名に複数のdivがあるため、フィルタを少し変更しなければなりませんでした。私は 'HtmlNode startNode = helpDocument.DocumentNode.Descendants(" h1 ")を使って終わりました。(d => d.InnerText.Contains(SectionName))。FirstOrDefault();'そしてそこから親ノードまで移動します。それの残りは完全に働いた。ありがとう – Rondel
優秀。私はとてもうれしいです。 –