Javascript:通过奇怪的格式化(Recursion?)从XML文件中获取值

时间:2015-12-05 16:15:00

标签: javascript xml recursion

我正在尝试迭代一个格式怪异的XML文件(我使用pdftohtml制作xml文件,我得到的输出很奇怪,但它比输出到HTML更有用)

以下是一个例子:

<text height="11" font="3">Lastname1, Firstname1</text>
<text height="11" font="3">111111-1</text>
<text height="6" font="2">random text</text>
<text height="6" font="2">random text</text>
<text height="11" font="3">Lastname2, Firstname2</text>
<text height="11" font="3">222222-2</text>
<text height="6" font="2">random text</text>
<text height="6" font="2">random text</text>
<text height="11" font="3">Lastname3, Firstname3</text>
<text height="11" font="3">name3long</text>
<text height="11" font="3">333333-3</text>
<text height="6" font="2">random text</text>
<text height="6" font="2">random text</text>
<text height="11" font="3">Lastname4, Firstname4</text>
<text height="11" font="3">444444-4</text>
<text height="11" font="3">Lastname5, Firstname5</text>
<text height="11" font="3">555555-5</text>
<text height="11" font="3">Lastname6, Firstname6</text>
<text height="11" font="3">name6long</text>
<text height="11" font="3">666666-3</text>

要打破它。 Name块的名称带有属性height:11,font:3,以具有相同属性但始终为length的ID结束:8。

我认为递归会解决我的问题,但它并没有给我输出我想要的输出,因为我正在尝试获取名称块开始的位置和结束位置的行号。

以下是我正在使用的代码示例

var txt = xml.getElementsByTagName('text');

    function block(b){
        var line = txt[b];
        if(line.innerHTML.length == 8){
            return b;
        }
        else{
            block(b+1);
        }
    }


    function getNameBlock(){

        // Notes: Name and Employee ID has attributes of height: 11 and font: 3
        // Employee ID has always length: 8;
        //
        // Start value should be assigned when we hit the attributes of height: 11, left: 62, font: 3
        // End value should be assigned when we hit the attributes above as well as length: 8
        // Console output will be start and end values

        for(var i=0;i<txt.length;i++){
            var line = txt[i];
            var start;
            var end;
            if(line.getAttribute('height') == '11' &&  line.getAttribute('font') == 3){
                start = i;
                end = block(start)

                console.log("Start: "+start+" End: "+end);

            }

        }
    }

我的输出没有按照我想要的方式工作,因为它给了我:

Start: 0 End: undefined
Start: 1 End: 1
Start: 4 End: undefined
Start: 5 End: 5
etc....

我只是想通过递归使事情复杂化吗?

1 个答案:

答案 0 :(得分:0)

在Block函数中,你必须在else语句中返回值

function block(b){
        var line = txt[b];
        if(line.innerHTML.length == 8){
            return b;
        }
        else{
        //if(b+1>=txt.length) return "Out Of Range"
           return block(b+1); // you missed return here
        }
    }