gpt4 book ai didi

php - 按节点深度对 DOMXPath 查询结果排序

转载 作者:行者123 更新时间:2023-12-02 15:47:37 24 4
gpt4 key购买 nike

鉴于此示例文档片段:

<html xmlns="http://www.w3.org/1999/xhtml" xmlns:zuq="http://localhost/~/zuqml">
<head></head>
<body>
<zuq:data name="a" />
<div>
<zuq:data name="b" />
</div>
<div>
<zuq:data name="c">
<zuq:format type="trim">
<zuq:param name="length">300</zuq:param>
<zuq:param name="append">
<span>
<zuq:data name="d" />
</span>
</zuq:param>
</zuq:format>
</zuq:data>
</div>
<div>
<zuq:data name="e">
<zuq:format type="trim">
<zuq:param name="length">300</zuq:param>
<zuq:param name="append">
<span>
<zuq:data name="f" />
</span>
</zuq:param>
</zuq:format>
</zuq:data>
</div>
</body>
</html>

我正在尝试获取 <zuq:data />要操作的节点,但按一定顺序:最深的第一个

我目前已经做到这一点:

$nodeList = $xpath->query('.//zuq:data[not(ancestor::zuq:region)]');
foreach($nodeList as $node){
$nodeOrder[] = Array($xpath->evaluate('count(ancestor::*)', $node) => $node->getAttribute('name'));
}

print_r($nodeOrder);

这当然会吐出这样的内容:

Array
(
[0] => Array
(
[2] => a
)
[1] => Array
(
[3] => b
)
[2] => Array
(
[3] => c
)
[3] => Array
(
[7] => d
)
[4] => Array
(
[3] => e
)
[5] => Array
(
[7] => f
)
)

现在我正在考虑只使用 array_multi_sort()usort()订购 DOMNode如果我要继续我当前的“解决方案”,则需要操纵对象。然而,在我看来,有人可能知道一种更有效的方法来解决这个问题。

有什么想法吗?

<小时/>

注意:对于其他不必要的实现细节,我的 XPath 查询字符串所做的超出了此处相关的范围。我刚刚将这个例子从我目前所在的位置拼凑起来。

最佳答案

我最终选择了 usort() DOM 树的操作变得越来越复杂,因此需要一个回调函数。

关于php - 按节点深度对 DOMXPath 查询结果排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4731466/

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