gpt4 book ai didi

php - XPath - 选择不属于列表的空元素

转载 作者:行者123 更新时间:2023-12-03 15:59:03 29 4
gpt4 key购买 nike

$list = array('br', 'hr', 'link', 'meta', 'title');

使用 DOMXpath,如何选择空的节点并且它们的 tagName 不在 $list 中?(我想在他们的 textContent 中添加一个空格,这样他们就不会自动关闭)

最佳答案

你没有给我们任何 XML 来处理,这不是很好,但是你开始吧:

$xml = <<<XML
<div>
<a>
</a>
<p>some text</p>
<p></p>
<span>no text
<hr/>
<ul></ul>
</span>
<br/>
</div>
XML;

$dom = new DOMDocument;
$dom->loadXML($xml);
$xpath = new DOMXPath($dom);
$list = array('br', 'hr', 'link', 'meta', 'title');
$expr = array();
foreach ($list as $l) {
$expr[] = "not(self::$l)";
}
$expr = implode(' and ', $expr);

foreach ($xpath->query("//*[$expr and not(normalize-space())]") as $elem) {
echo "$elem->nodeName\n";
}

这输出

a
p
ul

正如预期的那样。现在您有了节点——由您来添加空间。 IMO 只使用 not(normalize-space()) 然后查看 nodeName 是否不在您的列表中会更容易,但您要求的是 XPath 表达式,这就是你得到的。

请注意,使用normalize-space() 是因为纯空格仍可能导致节点自动关闭。如果这不是问题,您可以改用 node()

关于php - XPath - 选择不属于列表的空元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10818275/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com