DOMXPath多个包含选择器不起作用

时间:2019-07-28 21:27:36

标签: dom xpath domxpath

我有以下XPath查询,一个SO上的好心用户帮助了我:

$xpath->query(".//*[not(self::textarea or self::select or self::input) and contains(., '{{{')]/text()") as $node)

其目的是用某个值替换某些占位符,并正确捕获不应该替换的以下情况:

<textarea id="testtextarea" name="testtextarea">{{{variable:test}}}</textarea>

并正确替换出现的情况:

<div>{{{variable:test}}}</div>

现在,我要排除类型为<div>的元素,该元素在该查询中还包含类名note-editable,例如<div class="note-editable mayhaveanotherclasstoo">,以及文本区域,选择或输入。 / p>

我尝试过:

$xpath->query(".//*[not(self::textarea or self::select or self::input) and not(contains(@class, 'note-editable')) and contains(., '{{{')]/text()") as $node)

和:

$xpath->query(".//*[not(self::textarea or self::select or self::input or contains(@class, 'note-editable')) and contains(., '{{{')]/text()") as $node)

在以下类似问题上,我遵循了建议:PHP xpath contains class and does not contain class,并且没有出现PHP错误,但是note-editable <div>标签仍在替换其占位符。 / p>

您知道我尝试查询出了什么问题吗?

1 个答案:

答案 0 :(得分:0)

在xpath下使用它。

.//*[not(self::textarea or self::select or self::input or self::div[contains(@class,'note-editable')]) and contains(., '{{{')]