4

我有一个网页,我想通过代码修改(在特定单词上添加链接)。

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 函数,但它不起作用,并且执行时间太长。

所以我的问题是:如何使用 XPATH 选择没有 A、STRONG、IMG 子节点的节点?

4

2 回答 2

2

You cannot select nodes without their children. A node is a subpart of a tree, unless it is a leaf in which case it has not further children. To select the TextNode leaves containing the word "SPECIFIC" which are direct children of P elements, you do

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

This will exclude the text nodes inside other elements, e.g. in strong or a.

To replace them, you do

$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();

Also see DOMDocument in php and this XPath Tutorial

于 2012-06-22T10:50:41.413 回答
0

如果我理解正确,您希望选择 Xml 文档中作为<p>元素的直接子级的所有节点,中间没有任何其他元素。这是可能的,如下所示:

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

这个表达式选择

  1. 在所有<p>元素中
  2. 直接子节点(没有任何中间层)
  3. 除非它们是元素。
于 2012-06-22T11:07:31.197 回答