2

鉴于此示例文档片段:

<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 查询字符串所做的比这里相关的要多。我只是从我目前所处的位置拼凑出这个例子。

4

1 回答 1

0

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

于 2011-03-03T07:47:17.857 回答