テキスト文字列を持つすべての要素を検索しますか?

c# html html-agility-pack xpath

質問

特定のテキスト文字列を含むすべてのhtml要素(タグ)を削除しようとしています。私は2376のhtml文書を持っています。すべてが異なるdoctype標準を持っています。 Doctypeを持っていない人もいます(この質問には関係ないかもしれません)。

だから、「この論文を引用する方法」というテキスト文字列を探していますが、 <p>-tag<h4>-tagまたは<legend>-tagいずれかに囲まれていることがわかりました。

<p>-tagよくこのように見えますが、

<p style="text-align : center; color : Red; font-weight : bold;">How to cite this paper:</i></p>

<h4>-tagよくこのように見えますが、

<p style="text-align : center; color : Red; font-weight : bold;">How to cite this paper:</i></p>

<legend>-tagは次のようになります。

<p style="text-align : center; color : Red; font-weight : bold;">How to cite this paper:</i></p>

手元にあるタスクは、これらのタグを見つけてファイルから削除し、ファイルを再度保存することです。削除するタグが増えましたが、HAPとXPathを理解するための助けと、値やその他の固有のデータに基づいて特定のタグを見つける方法が必要です。

これまで私はC#でこのコードを考え出しました。これはコンソールアプリケーションです。これは私のメインです(悪いインデントで申し訳ありません)。

<p style="text-align : center; color : Red; font-weight : bold;">How to cite this paper:</i></p>

そして、これはディレクトリを通ってファイルを調べるプライベートな方法ですが、

<p style="text-align : center; color : Red; font-weight : bold;">How to cite this paper:</i></p>

ユニークなことは、「この論文を引用する方法」のようです。そのため、これらの正確な単語を含む特定のタグをすべて見つけようとしています。私のメモ帳には、このフレーズに1094個のファイルがあるはずなので、それらをすべて取得しようとしています。 :)

どのような助けが大いに感謝! :)

受け入れられた回答

Html Agility PackはLINQセレクタをサポートしていますが、この場合は非常に便利です。上記の例に基づいてHTMLをいくつか考えてみましょう:

var html =
@"<html><head></head><body>

<!-- selector match: delete these nodes -->
<p style='text-align: center; color: Red; font-weight: bold;'>How to cite this paper:</i></p>
<h4> How to cite this paper:</h4> Antunes, P., Costa, C.J. & amp; Pino, J.A. (2006).
<legend style='color: white; background-color: maroon; font-size: medium; padding: .1ex .5ex; border-right: 1px solid navy; border-bottom: 1px solid navy; font-weight: bold;'>How to cite this paper </legend>
<div><p><i><b>How to cite this paper (NESTED)</b></i></p></div>

<!-- no match: keep these nodes -->
<p>DO NOT DELETE - How to cite</p>
<h4>DO NOT DELETE - cite this paper:</h4>
<legend>DO NOT DELETE</legend>

</body></html>";

検索するタグのコレクションを作成し、一致するノードを選択してから、次のように削除することができます。

var html =
@"<html><head></head><body>

<!-- selector match: delete these nodes -->
<p style='text-align: center; color: Red; font-weight: bold;'>How to cite this paper:</i></p>
<h4> How to cite this paper:</h4> Antunes, P., Costa, C.J. & amp; Pino, J.A. (2006).
<legend style='color: white; background-color: maroon; font-size: medium; padding: .1ex .5ex; border-right: 1px solid navy; border-bottom: 1px solid navy; font-weight: bold;'>How to cite this paper </legend>
<div><p><i><b>How to cite this paper (NESTED)</b></i></p></div>

<!-- no match: keep these nodes -->
<p>DO NOT DELETE - How to cite</p>
<h4>DO NOT DELETE - cite this paper:</h4>
<legend>DO NOT DELETE</legend>

</body></html>";

次の結果が得られました。

var html =
@"<html><head></head><body>

<!-- selector match: delete these nodes -->
<p style='text-align: center; color: Red; font-weight: bold;'>How to cite this paper:</i></p>
<h4> How to cite this paper:</h4> Antunes, P., Costa, C.J. & amp; Pino, J.A. (2006).
<legend style='color: white; background-color: maroon; font-size: medium; padding: .1ex .5ex; border-right: 1px solid navy; border-bottom: 1px solid navy; font-weight: bold;'>How to cite this paper </legend>
<div><p><i><b>How to cite this paper (NESTED)</b></i></p></div>

<!-- no match: keep these nodes -->
<p>DO NOT DELETE - How to cite</p>
<h4>DO NOT DELETE - cite this paper:</h4>
<legend>DO NOT DELETE</legend>

</body></html>";



ライセンスを受けた: CC-BY-SA with attribution
所属していない Stack Overflow
このKBは合法ですか? はい、理由を学ぶ
ライセンスを受けた: CC-BY-SA with attribution
所属していない Stack Overflow
このKBは合法ですか? はい、理由を学ぶ