1

これに似たHTMLドキュメントを想像してみてください

   <div>
      <div>...</div>
      <table>...</table>
      <p>...</p>
      <p>...</p>
      <p>...</p>
      <table>...</table>
      <p>...</p>
      <div>...</div>
      <p>...</p>
      <p>...</p>
    </div>

そして、段落ノードの最初のシーケンスを取りたいと思います。pとは異なる名前が見つかるまで、pのチェックのノードコレクションを反復しようとしましたnextSiblingが、これは常にテキストです。

具体的には、ウィキペディアのページからテキストの最初の部分を取得することです。つまり、前のすべての段落は、目次や他のページのページの終わりのような非段落を見つけます。前の例では、最初の3つの段落を含むHtmlDocumentを取り上げたいと思います。

これを文字列に変換し、を使用して行うことができますIndexOf。ただし、ウィキペディアのページで何を見つけるかわからないため、より一般的なソリューションを好みます。

4

1 に答える 1

1

SkipWhileとTakeWhileを、divの子のリストと組み合わせて使用​​できます。

 var children = doc.DocumentNode.SelectNodes("/div/*");
 var paragraphs = children
      .SkipWhile(child => !string.Equals(child.Name, "p", StringComparison.OrdinalIgnoreCase))
      .TakeWhile(child => string.Equals(child.Name, "p", StringComparison.OrdinalIgnoreCase));
于 2013-01-17T22:49:27.540 に答える