2012-04-04 10 views
0

を使用して、HTML文書内のテキストの周りのタグを取得します。与えられた:私は特定の文字列のためのHTMLファイルを検索し、タグを抽出したいのC#

<div_outer><div_inner>Happy birthday<div><div>

私は「ハッピーバースデー」のためのHTMLを検索したいその後、関数はタグ構造のいくつかの並べ替えを返すがあります。これは、これはその1など外部のタグ最も内側のタグですしたがって、<div_inner></div>となり、<div_outer></div>となります。

アイデア?私はHTMLAgilityPackを考えていますが、私はそれを行う方法を理解できませんでした。

いつものように、みんな。

+0

このHTMLのソースは何ですか? – Oded

答えて

2

実際には、HAPはこれに適しています。

OuterHtmlParentプロパティを使用して、囲み要素とマークアップを取得できます。

+0

テキストを見つけて逆に作業するまで、各タグを繰り返し処理すると言っていますか?良いアイデアだけど、効率的すぎるとは思わない。私はときどき明白な答えが勝つと思う。 –

+0

@MarkWilliams - あなたは(特定の属性値を持つdiv要素を言う)のテキストに移動する方法を持っていない場合、それはパーサでそれを行うための唯一の方法です。あなたは、文字列のインデックスを取得し、その後、囲み要素を見つけるために、文字列を逆方向に前方に行くが、それはあなた自身の解析ルーチンを書くことを意味しますことができます。 – Oded

1

これにはxpathを使用できます。それはそう

var doc = new HtmlDocument(); 
doc.LoadHtml("<div_outer><div_inner>Happy birthday<div><div>"); 

var ancestors = doc.DocumentNode 
    .SelectNodes("//*[text()='Happy birthday'][1]/ancestor-or-self::*") 
    .Reverse() 
    .ToList(); 

:私は、テキストコンテンツがHappy birthdayある最初の(簡単にするために)ノードを見つけ、その後、すべてのこのノードの祖先(親、祖父母など)やノード自体を返す//*[text()='Happy birthday'][1]/ancestor-or-self::*表現を使用します返されるノードの順序は、ノードがドキュメント内で見つけた順序であるため、逆の方法はEnumerable.Reverseです。

これは2つのノード:div_innerdiv_outerを返します。

関連する問題