Öğeyi xpath ile alacak olan node.js'de bir işlev yazmaya çalışmak.Xpath ve cheerio kullanarak öğe alma
Ben
xpath = '/html/body/div/div[2]/div/h1/span'
Benim DOM cheerio yüklenir gibi istenilen dom elemanının bir xpath sahip aracılığıyla fs modülü (Bu web sayfası yerel olarak saklanan çünkü):
var file = fs.readFileSync("aaa.html")
var inDom = cheerio.load(file)
Sonra Her bir xpath parçası üzerinden yinelemeye çalışıyorum, dom ağacının elementini alıyorum, isim ve eleman numarası eşleşiyorsa bu çocukları kontrol edin ve eğer yaparsa, rez bu matematiksel elemen olarak saklayın t. Sonra yeni xpath parçası ile kazmaya devam ediyorum. Kod böyle görünüyor, ama istediğimi elde edemiyorum çünkü ilk makineyi aldıktan sonra ve rez'u eşleşen eleman olarak ayarladıktan sonra, döngü döngüsü için bir sonraki döngüde bu yeni öğe herhangi bir alt öğe içermiyor gibi görünüyor.
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
}
}
}
Belirtilen node.js modüllerini kullanarak herhangi bir kimse bana kodda yardımcı olabilir mi?
, üçüncü element, xpath'ın bir kısmı '../ div [3]/...' gibi olduğunda. Burada yapıştırılan kodu kullanıyorum http://pastebin.com/pzSYz6Zc Hata da yapıştırıldı. – Astro
Herhangi bir örnek html olmadan size öneri vermek zordur. Lütfen bir html sayfası gönderin – Noah
no html sayfası yok, node.js kodunun bir parçası – Astro