Php Xpath选择没有子节点的节点
我有一个网页,我想通过代码修改(添加特定单词的链接) HTML代码:Php Xpath选择没有子节点的节点,php,html,xml,xpath,Php,Html,Xml,Xpath,我有一个网页,我想通过代码修改(添加特定单词的链接) 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;">po
<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>
诺特尔历史酒店
详细说明词语1998:la création
推动目标,积极推进教育,支持青年和欧盟,支持集体表达和团结行动”(第2条)。
1999-2001年:les débuts specific WORDS
指定单词
所以我的目标是用preg_替换特定的单词,但只替换那些在p中,但在a或STRONG中,或者任何一个标签中的单词
我不能使用任何类或任何id,因为我以前不知道代码!
我尝试了preg_replace PHP函数,但它不起作用,而且执行时间太长
所以我的问题是:
如何使用XPATh选择没有a、STRONG、IMG子节点的节点?不能选择没有子节点的节点。节点是树的一个子部分,除非它是一片叶子,在这种情况下它没有更多的子节点。要选择包含单词“SPECIFIC”的TextNode叶子,它们是P元素的直接子元素,您需要
//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();
如果我理解正确,请参见和此,您希望选择Xml文档中作为
元素直接子元素的所有节点,而不选择中间的任何其他元素。这是可能的,如下所示:
`//p/node()[not(self::*)]`
此表达式选择
元素中我的第一印象是,除非您使用的是XHTML,并且能够保证没有特殊字符(如
),否则您将很难通过XPATH进行处理,因为它必须符合XML标准。但是我可能错了(已经知道!)一般来说,选择a中但不在B中的节点的XPath表达式是a//node()[不(祖先::B)]
如果您只想要文本节点,则需要将node()
替换为text()
。