我有一个网页,我想通过代码修改(添加特定单词的链接)。
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>
所以我的目标是prepec_replace在SPECIFIC WORDS上,但只限于那些在P中,但是从A或STRONG或任何一个标签中出来的人。
我不能使用任何类或任何id,因为我之前不知道代码! 我尝试了preg_replace PHP函数,但它没有用,而且执行时间太长。
所以我的问题是: 如何用XPATh选择没有A,STRONG,IMG chidrens的节点?
答案 0 :(得分:2)
您不能选择没有孩子的节点。节点是树的子部分,除非它是叶子,在这种情况下它没有其他子节点。要选择包含单词“SPECIFIC”的TextNode叶子,它们是P元素的直接子元素,你可以
//p/text()[contains(.,'SPECIFIC')]
这将排除其他元素中的文本节点,例如在强或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();
答案 1 :(得分:0)
如果我理解正确,您希望选择Xml文档中作为<p>
元素的直接子元素的所有节点,其间没有任何其他元素。这可能如下:
`//p/node()[not(self::*)]`
此表达式选择
<p>
元素中的