Пытаюсь написать в node.js функцию, которая будет получать элемент по xpath.
У меня есть xpath желаемого элемента dom, например
xpath = '/html/body/div/div[2]/div/h1/span'
Мой DOM загружается в cheerio через модуль fs (потому что эта веб-страница хранится локально):
var file = fs.readFileSync( "aaa.html" )
var inDom = cheerio.load( file )
Затем я пытаюсь выполнить итерацию по каждой части xpath, получить элемент дерева dom, проверить его дочерние элементы, совпадают ли имя и номер элемента, и если они совпадают, сохранить rez как этот математический элемент. Затем я продолжаю копаться с новой частью xpath. Код выглядит так, но он не может получить то, что я хочу, потому что сразу после того, как я получаю первый mach и устанавливаю rez в качестве соответствующего элемента, в следующем цикле for этот новый элемент, кажется, не имеет любые дочерние элементы.
var rez = inDom('html');
var xpath = inXpath.split( "/" );
for( var i = iterateStart; i < xpath.length; i++ ) {
var selector = xpath[ i ].split('[')[0];
var matches = xpath[ i ].match(/\[(.*?)\]/);
var child = 0;
if( matches ) {
child = matches[ 1 ];
}
for( var k = 0; k < rez.length; k++ ) {
var found = false
var curE = rez[ k ]
for( var p = 0; p < curE.children.length; p++ ) {
var curE_child = curE.children[ p ]
if( curE_child.name = selector ) {
if( child > 0 ) {
child--
}
else {
rez = curE_child
found = true
break
}
}
}
if( found ) {
break
}
}
}
Может ли кто-нибудь помочь мне с кодом, используя упомянутые модули node.js?