4

コードで変更したい Web ページがあります (特定の単語にリンクを追加する)。

HTML コード:

<div class="section">
<h2>Notre histoire</h2>
<p style="text-align: justify;">SPECIFICS WORDS<strong>1998 : la création</strong></p>
<p style="text-align: justify;">pour objectif « de promouvoir, selon une démarche d’éducation active, auprès des jeunes et à travers eux, des projets d’expression collective et d’action de solidarité » (article 2).<br><br><strong>1999-2001 : les débuts SPECIFICS WORDS</strong></p>
<p style="text-align: justify;">SPECIFICS WORDS<a href="#">SPECIFICS WORDS</a></p>
</div>

したがって、私の目的は、特定の単語を preg_replace することですが、P にあるが、A または STRONG、またはいずれかのタグから外れている人のみです。

以前のコードがわからないため、クラスや ID を使用できません。preg_replace PHP 関数を試しましたが、機能せず、実行に時間がかかりすぎました。

だから私の質問は: A、STRONG、IMG chidren のないノードを XPATH で選択する方法は?

4

2 に答える 2

2

子のないノードを選択することはできません。ノードは、それ以上の子を持たないリーフでない限り、ツリーのサブパーツです。P 要素の直接の子である "SPECIFIC" という単語を含む TextNode の葉を選択するには、次のようにします。

//p/text()[contains(.,'SPECIFIC')]

これにより、strong や a など、他の要素内のテキスト ノードが除外されます。

それらを置き換えるには、次のようにします

$dom = new DOMDocument;
$dom->loadHTML($html);
$xpath = new DOMXPath($dom);
foreach ($xpath->query('//p/text()[contains(.,"SPECIFIC")]') as $textNode) {
    $textNode->nodeValue = "REPLACED";
}
echo $dom->saveHTML();

PHP の DOMDocumentとこのXPath チュートリアルも参照してください。

于 2012-06-22T10:50:41.413 に答える
0

私の理解が正しければ、要素の直接の子である Xml ドキュメント内のすべてのノードを選択し<p>、間に他の要素を入れないようにする必要があります。これは次のように可能です。

`//p/node()[not(self::*)]`

この式は選択します

  1. すべての<p>要素で
  2. 直接の子ノード (中間レベルなし)
  3. それらが要素でない限り。
于 2012-06-22T11:07:31.197 に答える