Düğüm derinliği DOMXPath sorgu sonuçlarını Sipariş

0 Cevap php

Bu örnekte belge pasajı Verilen:

<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>

Ben işlemek için <zuq:data /> düğümleri kapmak için çalışıyorum, ama belli bir sırayla: deepest first.

Ben şu anda bu noktaya kadar ele verdik:

$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);

Hangi tabii bu tükürür:

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
    )
)

Şimdi sadece array_multi_sort() veya usort() benim şimdiki 'çözüm' ile ileri gitmek olsaydı DOMNode manipülasyon için nesneleri sipariş kullanarak düşünüyor yaşıyorum. Ancak, kimse bu konuda gitmek için daha verimli bir şekilde biliyor olabilir gibi geliyor bana.

Herhangi bir düşünce?


Not: Benim XPath sorgu dizesi diğer gereksiz uygulama ayrıntıları için, burada ilgili olandan daha fazla yapıyor. Ben sadece şu anda kulüpler nerede birlikte bu örneği parçalı.

0 Cevap