質問

私は質問をのCodePlex議論するではなく、私は願っていますstackoverflowの時にここに迅速に答えを取得します。

は、だから、私はC#でHTML解析用HTML敏捷性パックを使用します。 私は、次のHTML構造を有するます:

<body>
   <p class="paragraph">text</p>
   <p class="paragraph">text</p>
   <p class="specific">text</p>
   <p class="paragraph">text</p>
   <p class="paragraph">text</p>
</body>

そして、私はクラスで、すべてのp要素を取得する必要があり、「段落」クラスを持つp要素「特定」の後に存在している。

それを行う方法はありますか?

感謝します。

役に立ちましたか?

解決

のマークの例のように.Classを使用して(そのdoesntのが存在する場合、適切であるどんな代替)

を使用 SkipWhileする

例えば。 LINQPad の中で、あなたはから5,6,7を取得します:

int[] a = { 6, 5, 6 ,7 };
a.SkipWhile(x=>x!=6).Skip(1).Dump();

だから、どちらか、タイプSELECTNODESリターンに応じて、

.SelectNodes( "/p" ).SkipWhile( p => p.Class != "specific" ).Skip(1)

または

.SelectNodes( "/p" ).Cast<XX>().SkipWhile( p => p.Class != "specific" ).Skip(1)

(又は、醜いバージョン)

.SelectNodes( "/p" ).SkipWhile( p => ((XX)p).Class != "specific" ).Skip(1)

(またはいくつかのケースで - あなたの表現が既に適切にフィルタリングされていない場合)

.SelectNodes( "/p" ).OfType<XX>().SkipWhile( p => p.Class != "specific" ).Skip(1)

編集:私はおそらく、拡張メソッドを作成したい:

static class HapExtensions
{
    public IEnumerable<T> SkipUntilAfter( this IEnumerable<T> sequence, Predicate<T> predicate) {
        return sequence.SkipWhile( predicate).Skip(1);
       }
}

誰もがこのために、先行技術を検索する気?何かいい名前の提案ですか?

他のヒント

これを試してみてください。

bool latterDayParagraphs = false;
List<DocumentNode> nodes = new List<DocumentNode>();
foreach(var pElement in doc.DocumentNode.SelectNodes("/p"))
{
   if(pElement.Class != "paragraph") 
   {
      latterDayParagraphs = true;
      continue;
   }
   if(latterDayParagraphs)
   {
      nodes.Add(pElement);
   }
}
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top