簡體   English   中英

jQuery:計算xml中的節點分離

[英]Jquery: Count node separation in xml

我正在使用JavaScript(Jquery $.ajax )加載xml文檔。

我需要能夠計算將2個​​文本節點分隔開的分支數(b)。

例如

    <b n="Archaea">
        <s>Archaea</s>
        <b n="Eubacteria">
            <s>Cyanobacteria</s>
            <s>Spirochaete</s>
            <b n="Seaweeds">
                <s>Red rags</s>
                <s>Calliblepharis</s>
            </b>
        </b>
        <b n="Land plants">
            <s>Liverwort</s>
            <s>Moss</s>
            <s>Bracken fern</s>
            <b n="Seed plants">
                <s>Scots pine</s>
                <s>Ginko</s>
                <s>Welwitschia</s>
            </b>
        </b>
    </b>

因此,例如,“蘇格蘭松樹”與“ Calliblepharis”相距多少個分支。 在這種情況下,答案將是4(種子植物>陸地植物>古細菌>真細菌>海藻)。

我還需要計算兩個元素之間的“最接近的共同祖先”。 例如,在“蘇格蘭松樹”和“銀杏”之間將是“蕨菜蕨”(因為蕨菜蕨是最接近包含“蘇格蘭松樹”和“銀杏”的分支的物種)。 我真的不確定當兩個元素在不同分支中彼此距離很遠時,這將如何工作。

抱歉,如果我在這里使用錯誤的語言。 希望有道理。

抱歉,回復晚了。

我已經在jsbin上設置了一個演示

希望這是可以自我解釋的,但是如果不問我的話。

對於xhr位,您需要在與頁面相同的目錄中具有file.xml

這是獲取分支之間距離的主要功能

    function elementDistance(elem1, elem2) {
        var steps = 0;
        //the parent elements are the branches
        var first = elem1.parentElement;
        var second = elem2.parentElement;
        //if the elements are at different depths you need to even them up
        //and count each time as a step
        if (elem1.depth() > elem2.depth()) {
            while (first.depth() > second.depth()) {
                first = first.parentElement;
                steps++;
            }
        }
        else if (elem1.depth() < elem2.depth()) {
            while (first.depth() < second.depth()) {
                second = second.parentElement;
                steps++;
            }
        }
        while (first !== second) {
            steps += 2;
            first = first.parentElement;
            second = second.parentElement;
        }
        return steps;
    }

PS演示無法在Firefox或IE瀏覽器

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM