我正在尝试迭代一个格式怪异的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....
我只是想通过递归使事情复杂化吗?
答案 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
}
}